1项目简介
- 集成
fescar
做分布式事务一致性实验 - 首先
zookeeper
和fescar-server
已经开启了 - 该模块是
fescar-client
,需要自定义数据源 fescar.version: 0.1.3
//fescar数据源配置
@Configuration
public class DruidConfig {
//配置一个DruidDataSource:必须是DruidDataSource
@Bean("druidDataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DruidDataSource druidDataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
//这是fescar需要的dataSource:其中DataSourceProxy的参数必须是DruidDataSource
@Primary
@Bean("fescarDataSource")
public DataSource dataSource(DruidDataSource druidDataSource) {
DataSourceProxy dataSourceProxy = new DataSourceProxy(druidDataSource);
return dataSourceProxy;
}
2 错误日志
3 循环依赖错误原因
DataSourceAutoConfiguration
中注册了dataSourceInitializerPostProcessor
后置处理器- 它在第一次初始化数据源时会被触发,会去初始化主数据源,如果第一次初始化的是主数据源,就会导致数据源初始化循环依赖
3.1 错误调试发现步骤
3.1.1 创建 sqlSessionFacotry
@Bean
@ConditionalOnMissingBean
//关键:构造器注入dataSource,这里注入的是fescarDataSource(因为被@Primay注解了)
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
}
3.1.2 创建 fescarDataSource
@Primary
@Bean("fescarDataSource")
//需要递归创建 druidDataSource
public DataSource dataSource(DruidDataSource druidDataSource) {
DataSourceProxy dataSourceProxy = new DataSourceProxy(druidDataSource);
return dataSourceProxy;
}
3.1.3 创建 druidDataSource
@Bean("druidDataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DruidDataSource druidDataSource(