SpringBoot配置MySQL多数据源

2020-11-17  本文已影响0人  想象之中丶意料之外

1、先配置数据库连接文件

在连接文件中,设置多个数据库连接

@Configuration
public class DataSourceConfig {
    @Primary    // 设置为主数据库
    @Bean(name="AAA")
    @ConfigurationProperties(prefix = "spring.datasource.AAA")
    public DataSource coldChainReadDataSource(){
        return DataSourceBuilder.create(DruidDataSource.class.getClassLoader()).build();  // 这里使用了阿里巴巴的数据库连接池Druid
    }

    @Bean(name="BBB")
    @ConfigurationProperties(prefix = "spring.datasource.BBB")
    public DataSource coldChainWriteDataSource(){
        return DataSourceBuilder.create(DruidDataSource.class.getClassLoader()).build();
    }
}

2、AAA数据库连接配置文件

@Configuration
@MapperScan(basePackages = {"com.xx.xx.xx.AAA"},sqlSessionTemplateRef = "loadrSqlSessionTemplate")
public class MyBatisLoadReadConfig {
    @Autowired
    @Qualifier("AAA")  // 其他都一样,只要点在这里,加载不同的数据连接配置
    private DataSource dataSource;
 
    @Value("${spring.datasource.AAA.jdbcUrl}")
    private String jdbcUrl;
    
    @Bean
    public SqlSessionFactory loadrSqlSessionFactory() throws Exception{
        SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setVfs(SpringBootVFS.class);
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[] resource=resolver.getResources("classpath:com/xx/xx/xx/AAA/*/*.xml");    // 配置xml路径
        sqlSessionFactoryBean.setMapperLocations(resource);
        sqlSessionFactoryBean.setTypeAliasesPackage("com.xx.xx.model"); // 配置数据返回实体包路径
        sqlSessionFactoryBean.setPlugins(new Interceptor[]{new MybatisInterceptor(jdbcUrl)});    // 设置数据库sql检测插件,主要用户sql检测的。不需要sql中间件的,可以不用设置
        return sqlSessionFactoryBean.getObject();
    }
 
    @Bean
    public SqlSessionTemplate loadrSqlSessionTemplate() throws Exception{
        SqlSessionTemplate sqlSessionTemplate=new SqlSessionTemplate(loadrSqlSessionFactory());
        return sqlSessionTemplate;
    }

    // 事务管理器
    @Bean(name = "loadrTransactionManager")
    public DataSourceTransactionManager loadrTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }
}

3、BBB数据库连接配置文件

@Configuration
@MapperScan(basePackages = {"com.xx.xx.xx.BBB"},sqlSessionTemplateRef = "loadrSqlSessionTemplate")
public class MyBatisLoadReadConfig {
    @Resource(name = "BBB")
    private DataSource dataSource;
 
    @Value("${spring.datasource.BBB.jdbcUrl}")
    private String jdbcUrl;
    
    @Bean
    public SqlSessionFactory loadrSqlSessionFactory() throws Exception{
        SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setVfs(SpringBootVFS.class);
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[] resource=resolver.getResources("classpath:com/xx/xx/xx/BBB/*/*.xml");    // 配置xml路径
        sqlSessionFactoryBean.setMapperLocations(resource);
        sqlSessionFactoryBean.setTypeAliasesPackage("com.xx.xx.model"); // 配置数据返回实体包路径
        sqlSessionFactoryBean.setPlugins(new Interceptor[]{new MybatisInterceptor(jdbcUrl)});    // 设置数据库sql检测插件,主要用户sql检测的
        return sqlSessionFactoryBean.getObject();
    }
 
    @Bean
    public SqlSessionTemplate loadrSqlSessionTemplate() throws Exception{
        SqlSessionTemplate sqlSessionTemplate=new SqlSessionTemplate(loadrSqlSessionFactory());
        return sqlSessionTemplate;
    }

    // 事务管理器
    @Bean(name = "loadrTransactionManager")
    public DataSourceTransactionManager loadrTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }
}

=============再多的,以此类推===============

上一篇下一篇

猜你喜欢

热点阅读