@Bean(name = "masterDataSource")
@Primary
@ConfigurationProperties(prefix="spring.datasource.master")
public DataSource masterDataSource() {
DruidDataSource dataSource = new DruidDataSource();
return dataSource;
}
@Bean(name = "slaveDataSource")
@ConfigurationProperties(prefix="spring.datasource.slave")
public DataSource slaveDataSource() {
DruidDataSource dataSource = new DruidDataSource();
return dataSource;
}
@Bean(name = "dynamicDataSource")
public DataSource dataSource(@Qualifier("masterDataSource") DataSource masterDataSource,
@Qualifier("slaveDataSource") DataSource slaveDataSource) {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
Map<Object, Object> dataSourceMap = new HashMap<>();
dataSourceMap.put("masterDataSource", masterDataSource);
dataSourceMap.put("slaveDataSource", slaveDataSource);
dynamicDataSource.setTargetDataSources(dataSourceMap);
dynamicDataSource.setDefaultTargetDataSource(masterDataSource);
return dynamicDataSource;
}
这是我创建动态数据源的代码,但似乎有些不对劲
Error creating bean with name 'dynamicDataSource': Requested bean is currently in creation: Is there an unresolvable circular reference?
是否存在无法解析的循环引用?我该如何解决?
谢谢你的答案!答案 0 :(得分:1)
在您的情况下,dynamicDataSource
创建依赖于其他2个bean slaveDataSource
&amp; masterDataSource
。所以你需要在bean @DependsOn
上添加dynamicDataSource
,它指示Spring创建bean dynamicDataSource
也依赖于其他2个bean。
因此,您更新的配置应如下所示:
@DependsOn({"masterDataSource", "slaveDataSource"})
@Bean(name = "dynamicDataSource")
public DataSource dataSource(@Autowired @Qualifier("masterDataSource") DataSource masterDataSource, @Autowired @Qualifier("slaveDataSource") DataSource slaveDataSource) {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
Map<Object, Object> dataSourceMap = new HashMap<>();
dataSourceMap.put("masterDataSource", masterDataSource);
dataSourceMap.put("slaveDataSource", slaveDataSource);
dynamicDataSource.setTargetDataSources(dataSourceMap);
dynamicDataSource.setDefaultTargetDataSource(masterDataSource);
return dynamicDataSource;
}
当前bean所依赖的Bean。指定的任何bean都是 保证在此bean之前由容器创建。用过的 在bean没有明确依赖的情况下很少发生 另一个是通过属性或构造函数参数,而是 取决于另一个bean初始化的副作用。
或者有关详细信息,请查看此Why @DependsOn has no effect
答案 1 :(得分:0)
在bean之上提及@Order可能会解决此问题。 就像你可以提到@Order(1),@ Order(2)
或通过在application.properties
中将日志级别设置为debug来检查日志