chenlei2 / spring-boot-mybatis-rw

基于mybatis,springboot开箱即用的读写分离插件
Apache License 2.0
338 stars 151 forks source link

DataSource不能注入和事务开启后无法切换数据源的问题 #5

Closed Jukewu closed 7 years ago

Jukewu commented 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方法,所以也就没有切换数据源

chenlei2 commented 7 years ago

非常感谢你问题,这个确实是问题,被我重构错了,你用 LazyConnectionDataSourceProxy 这个类。我下班改回来