背景
之前做数据抽取的时候,搭了一个mybatis动态数据源切换的架子。方便他们写抽取的代码。今天同事问我,架子里面的mybatisplus的IPage失效了是什么问题。想了一下,应该是写动态数据源的时候,我自定义的mybatis的配置覆盖了已有的配置。于是我让他先把我写的配置进行删除,看是否正常。得到回复,删除后正常。那么到此问题原因找到,接下来的解决方法,只要在配置中增加分页器即可。
解决方案
建立一个分页器的bean配置
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
我们随便自定义一个类即可,这里主要是将这个类作为一个bean交给spring容器管理。
在sqlSessionFactory中注入
@Bean(name="sessionFactory")
public SqlSessionFactory sessionFactory(
@Qualifier("bigDataDataSource") DataSource bigDataDataSource,
@Qualifier("branchDataSource") DataSource branchDataSource,
@Qualifier("basicDataSource") DataSource basicDataSource,
org.apache.ibatis.session.Configuration config) throws Exception{
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
//构造方法,解决动态数据源循环依赖问题。
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.addInterceptor(new PaginationInterceptor());
sessionFactoryBean.setConfiguration(configuration);
sessionFactoryBean.setConfiguration(config);
sessionFactoryBean.setDataSource(this.DataSource(bigDataDataSource,branchDataSource, basicDataSource));
return sessionFactoryBean.getObject();
}