2016-07-27 36 views
2

我有一个简单的SpringBoot应用程序,我想使用AutoConfiguration来配置Tomcat jdbc池数据源。SpringBoot数据源自动配置不工作

我使用这些Spring的依赖:

// Spring Boot 
compile 'org.springframework.boot:spring-boot-starter-web:1.3.5.RELEASE' 
compile 'org.springframework.boot:spring-boot-starter-jdbc:1.3.5.RELEASE' 

下面是我的application.yml文件我的数据源属性:

spring: 
    datasource: 
     url: jdbc:mysql://my.host/mydb 
     username: user 
     password: pwd 
     driver-class-name: com.mysql.jdbc.Driver 
     initialSize: 5 

我肯定性被加载,因为应用程序是采摘提高其他价值。

我在配置文件中定义bean为:

@Bean(name="myDataSource") 
@ConfigurationProperties(prefix="spring.datasource") 
public DataSource getDataSource() { 
    DataSource dataSource = DataSourceBuilder.create().build() 
    return dataSource 
} 

我注入数据源到我的DAO是这样的:

@Slf4j 
@Repository 
class MyDAO { 

    @Autowired 
    DataSource dataSource 

    public void getFoo() { 
     log.info("DB URL: ${dataSource.getUrl()}") 
    } 
} 

如果我在了getDataSource设置断点()方法DataSourceBuilder将创建一个DataSource实例。但是,像URL,用户和密码这样的对象的所有属性都是空的。另外,当我调用getFoo()时,dataSource变量为空。我试过在我的AppConfig中注释掉bean定义。 dataSource仍然为空。有什么建议么?

我翻阅了Spring Boot文档和Spring书,但没有看到像这样的例子。我看到我自己创建DataSource的例子。但我希望Spring的自动配置能够自动将这些东西结合在一起。

在此先感谢您提供的任何帮助。

回答

2

通过创建自己的bean,您实际上关闭了Boot的自动配置DataSource。你可以删除你的getDataSource方法,让Boot自动配置一个。

+0

我已经更新了问题,包括我如何注入bean。我试着在我的Java配置文件中注释这个bean的创建。这样做,注入的数据源为空。 –

+0

Spring注入的东西不应该为null。你如何获得一个空数据源的MyDAO的实例? –

+0

您当场在。我正在新建DAO对象。一旦我改变了它并添加了SpringBoot JPA依赖项,它就可以工作。我试图获得足够的分数来标记您的答案有用。一旦我到达那里,我会给你打个勾。再次感谢。 –

2

根据Andy的评论,我发现我有两个问题。首先,我需要将JPA依赖项包含到项目中。我将这一行添加到我的build.gradle文件中:

compile 'org.springframework.boot:spring-boot-starter-data-jpa:1.3.5.RELEASE' 

其次,我使用new()创建了MyDAO的实例。我通过创建一个使用@Autowired注入MyDAO实例的服务类来解决此问题。一旦DAO成为Spring托管bean,它就能够从Tomcat连接池中注入DataSource的实例。

相关问题