2017-05-11 52 views
0

我有一个使用Spring数据JPA的以下Spring引导项目。我休息控制器注释与以下annotations-:Spring引导 - 为什么手动配置Hibernate时需要排除?

@SpringBootApplication 
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) 
@ComponentScan({ "com.foo.bar"}) 
public class RESTService { 

我的问题是,为什么在@EnableAutoConfiguration需要排除参数?如果我没有启动应用程序排除我得到以下者除外:

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Tomcat.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.tomcat.jdbc.pool.DataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (no profiles are currently active). 

现在我手动从我的项目中配置Hibernate的。

我的推理是,由于Spring Boot会在类路径上看到spring数据,它会尝试自动配置JDBC和Hibernate JPA。但为什么不试图自动配置Mongo或任何其他数据库解决方案?

有人能帮我理解这里发生了什么吗?

我的POM文件是 - :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.foo.bar</groupId> 
    <artifactId>Project</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>REST Service</name> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.5.1.RELEASE</version> 
    </parent> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>net.sourceforge.javacsv</groupId> 
      <artifactId>javacsv</artifactId> 
      <version>2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-core-asl</artifactId> 
      <version>1.1.0</version> 
     </dependency> 
     <!-- 
     <dependency> 
       <groupId>org.fosstrak.epcis</groupId> 
       <artifactId>epcis-repository</artifactId> 
       <version>0.5.0</version> 
      </dependency> 
      --> 
      <dependency> 
       <groupId>org.fosstrak.epcis</groupId> 
       <artifactId>epcis-repository</artifactId> 
       <version>0.5.0</version> 
       <scope>system</scope> 
       <systemPath>${project.basedir}/lib/epcis-commons-0.5.0.jar</systemPath> 
      </dependency> 
    </dependencies> 
    <properties> 
     <java.version>1.7</java.version> 
    </properties> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <configuration> 
        <mainClass>com.foo.bar.RESTService</mainClass> 
        <addResources>true</addResources> 
        <layout>JAR</layout> 
        </configuration> 
       <executions> 
        <execution> 
         <goals> 
         <goal>repackage</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
+1

请问您可以发布您的pom文件吗? @SpringBootApplication应该放在主应用程序类中。 RESTService类是您的主类吗? – MrKiller21

+0

@ MrKiller21添加了我的POM文件 –

+1

Spring Boot将只配置它在类路径中找到的内容。如果你没有mongo为什么需要配置mongo。 –

回答

0

春天只有自动配置蒙戈如果你在你的类路径各自的启动依赖。

例如:

 <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-mongodb</artifactId> 
      <version>1.3.2.RELEASE</version> 
     </dependency> 

关于你postet例外,它说,你没有带配置了DATABASEDRIVER。您需要在您的属性中沿着这些行进行处理:

spring.datasource.driver-class-name: oracle.jdbc.pool.OracleDataSource 
spring.datasource.url: jdbc:oracle:thin:@<host>:1521:<schema> 
spring.datasource.username: <user> 
spring.datasource.password: <password> 

取决于当然使用的数据库。

+0

你确定吗? JPA的自动配置是什么? –

+0

我改变了一下解释。我希望现在更清楚。 –

0

根据你的pom.xml,我假设你正在使用Postgres。确保在您配置数据源的application.properties文件中。异常可能表明它配置错误。

spring.datasource.url=jdbc:postgresql://localhost/testdb 
spring.datasource.username=postgres 
spring.datasource.password=123 
相关问题