StringBoot 中 配置 Mybatis 双(多)数据源

背景


实际业务中,用到多数据源的情况很普遍,笔者就以实际业务场景中的需要操作两个数据源的情况,做一次总结。

实现代码


1、首先排除 自动加载注解

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class })
public class SpringbootMultidatabaseApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootMultidatabaseApplication.class, args);
    }

}

2、配置数据源信息

@Configuration
@MapperScan(basePackages = "com.io.springbootmultidatabase.mapper.master", sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {

    @Bean(name = "masterDataSource")
    @ConfigurationProperties("datasource.master")
    public DataSource masterDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "masterSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/master/*.xml"));
        return sessionFactoryBean.getObject();
    }

}
@Configuration
@MapperScan(basePackages = "com.io.springbootmultidatabase.mapper.slave", sqlSessionFactoryRef = "masterSqlSessionFactory")
public class SlaveSourceConfig {

    @Bean(name = "slaveDataSource")
    @ConfigurationProperties("datasource.slave")
    public DataSource slaveDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "slaveSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/slave/*.xml"));
        return sessionFactoryBean.getObject();
    }
}

特别注意上面 mapper 的路径!!

参考代码路径:https://github.com/shihongwei/springboot-multidatabase

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容