![](/img/trans.png)
[英]With Spring boot and multiple data sources how do I specify @primary outside the configuration class?
[英]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.