Closed Jukewu closed 7 years ago
1.首先我是在你给的例子上面做的测试 @Bean(name="dataSourceProxy") //@ConditionalOnMissingBean @ConditionalOnBean(name = { "writeDataSource", "readDataSources" }) public DataSource dataSource( @Qualifier("readDataSources") Object readDataSoures, @Qualifier("writeDataSource") Object writeDataSource) { } DataSource这里如果不把@ConditionalOnMissingBean注解去掉,它就不会实例化。然后,我把它命名为dataSourceProxy,SqlSessionFactory的参数上面加@Qualifier("dataSourceProxy")之后才可以正常初始化SqlSessionFactory。 @Bean public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSourceProxy")DataSource dataSource) throws Exception {} 2.还有个比较难办的问题是,假如我同一个方法中既有查询又有更新,并且我在方法上面加了@Transactional事务注解,那么,数据源就无法切换。比如我先查询,更新的时候也是走的读库,如果我先更新,那么查询的时候就走写库,主要问题是因为如果开了事务的话,第二次SqlSession开启链接的时候没有再次调用dataSourceProxy.getConnection方法,所以也就没有切换数据源
@Bean(name="dataSourceProxy") //@ConditionalOnMissingBean @ConditionalOnBean(name = { "writeDataSource", "readDataSources" }) public DataSource dataSource( @Qualifier("readDataSources") Object readDataSoures, @Qualifier("writeDataSource") Object writeDataSource) { }
@Bean public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSourceProxy")DataSource dataSource) throws Exception {}
非常感谢你问题,这个确实是问题,被我重构错了,你用 LazyConnectionDataSourceProxy 这个类。我下班改回来
1.首先我是在你给的例子上面做的测试
@Bean(name="dataSourceProxy") //@ConditionalOnMissingBean @ConditionalOnBean(name = { "writeDataSource", "readDataSources" }) public DataSource dataSource( @Qualifier("readDataSources") Object readDataSoures, @Qualifier("writeDataSource") Object writeDataSource) { }
DataSource这里如果不把@ConditionalOnMissingBean注解去掉,它就不会实例化。然后,我把它命名为dataSourceProxy,SqlSessionFactory的参数上面加@Qualifier("dataSourceProxy")之后才可以正常初始化SqlSessionFactory。@Bean public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSourceProxy")DataSource dataSource) throws Exception {}
2.还有个比较难办的问题是,假如我同一个方法中既有查询又有更新,并且我在方法上面加了@Transactional事务注解,那么,数据源就无法切换。比如我先查询,更新的时候也是走的读库,如果我先更新,那么查询的时候就走写库,主要问题是因为如果开了事务的话,第二次SqlSession开启链接的时候没有再次调用dataSourceProxy.getConnection方法,所以也就没有切换数据源