2016-07-27 37 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的實例。

相關問題