java一个项目多个数据源_java – 如何使用多个数据源创建Spring Boot项目?

2021-07-08
0

我正在开发一个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.正如您配置了两个,它不知道使用哪一个.告诉它应该使用哪一个你应该mark one of them as @Primary:

@Bean

@Primary

public DataSource transactionsDataSource() {

BasicDataSource dataSource = new BasicDataSource();

return dataSource;

}

标签:java,spring,spring-boot-2,datasource,circular-reference

来源: https://codeday.me/bug/20190703/1363881.html

https://blog.csdn.net/weixin_32019329/article/details/114622728

相关信息

评论