簡體   English   中英

如何使用多個數據源創建Spring Boot項目?

[英]How can I make a Spring Boot project with multiple data sources?

我正在開發一個Spring Boot / Spring Batch項目,我需要配置兩個數據源。 一個是用於跟蹤事務的內存中hsqldb數據庫。 另一個是常規MySQL數據庫,將由我的ItemWriters更新。

問題是,一旦我嘗試配置第二個數據源,Spring就會開始拋出“無法解決的循環依賴”錯誤,即

Error creating bean with name 'preprodDataSource' defined in class path 
resource [xxx/tools/batch/xxx/MyConfiguration.class]: Initialization of
bean failed; nested exception is 
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error 
creating bean with name 'dataSourceAutoConfigurationInitializer': Requested bean is 
currently in creation: Is there an unresolvable circular reference?

我的MyConfiguration.java文件的相關塊看起來像:

@Bean
public DataSource transactionsDataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
    dataSource.setUrl("jdbc:hsqldb:mem:testdb;sql.enforce_strict_size=true;hsqldb.tx=mvcc");
    dataSource.setUsername("sa");
    dataSource.setPassword("");
    return dataSource;
}

@Bean
public DataSource preprodDataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/somedb");
    dataSource.setUsername("someuser");
    dataSource.setPassword("somepass");
    return dataSource;
}

如果我注釋掉定義第二個數據源的@Bean,一切都很好。 應用程序啟動並運行沒有問題。 但是,如果我留下它,我會得到上面的錯誤。

我對此的天真解釋是,Spring正在構建一個'dataSourceAutoConfigurationInitializer'實例來處理第一個數據源的初始化,當它試圖構造第二個數據源來處理第二個數據源時,會發生不好的事情。

有什么方法可以解決這個問題嗎?

默認情況下,Spring Boot的自動配置將嘗試使用應用程序的DataSource為您創建JdbcTemplate 正如您配置了兩個,它不知道使用哪一個。 告訴它使用哪一個你應該將其中一個標記為@Primary

@Bean
@Primary
public DataSource transactionsDataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    …
    return dataSource;
}

或者,您可以禁用自動配置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM