多数据源配置

1. 修改启动类
首先要将spring boot自带的DataSourceAutoConfiguration禁掉,因为它会读取application.properties文件的spring.datasource.*属性并自动配置单数据源。在@SpringBootApplication注解中添加exclude属性即可:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
2. 然后在application.properties或者.yml中配置多数据源连接信息:
# titan库

spring.datasource.titan-master.url=jdbc:mysql://X.X.X.X:port/titan?characterEncoding=UTF-8

spring.datasource.titan-master.username=

spring.datasource.titan-master.password=

spring.datasource.titan-master.driver-class-name=com.mysql.jdbc.Driver

# 连接池配置

# 省略

# 其它库

spring.datasource.db2.url=jdbc:mysql://X.X.X.X:port/titan2?characterEncoding=UTF-8

spring.datasource.db2.username=

spring.datasource.db2.password=

spring.datasource.db2.driver-class-name=com.mysql.jdbc.Driver
3. 由于我们禁掉了自动数据源配置,因些下一步就需要手动将这些数据源创建出来
@Configuration
public class DataSourceConfig {

    @Primary //当前注解跟随主库
    @Bean(name="ds1")
    @Qualifier("ds1")
    @ConfigurationProperties(prefix = "spring.datasource.jzys") // application.properteis中对应属性的前缀
    public DataSource dataSource1() {
        return DataSourceBuilder.*create*().build();
    }


    @Bean(name = "ds2")
    @Qualifier("ds2")
    @ConfigurationProperties(prefix = "spring.datasource.sxxatest") // application.properteis中对应属性的前缀
    public DataSource dataSource2() {
        return DataSourceBuilder.*create*().build();
    }

}
4. 配置两个mybatis的SqlSessionFactory分别使用不同的数据源
主数据库配置

@Configuration
@MapperScan(basePackages = {"com.xin.tianye.device.mapper"}, sqlSessionTemplateRef = "sqlSessionTemplatePrimary")
public class MybatisDbAConfig {

    */****
**     * **为了生效在**application.properties**中**mybatis**的配置**
**     *** **参考: **http://www.yayihouse.com/yayishuwu/chapter/2338**
**     */**
**    *@Bean
    @ConfigurationProperties(prefix="mybatis.configuration")
    public org.apache.ibatis.session.Configuration globalConfiguration() {
        return new org.apache.ibatis.session.Configuration();
    }

    //
    @Bean(name="sqlSessionFactoryPrimary")
    @Primary
    public SqlSessionFactory masterSqlSessionFactory(
            @Qualifier("ds1")DataSource dataSource,org.apache.ibatis.session.Configuration config) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setConfiguration(config);

        //如果使用xml 的话这里配置
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/**/*Mapper.xml"));
        return bean.getObject();
    }

    //事务
    @Bean(name = "transactionManagerPrimary")
    @Primary
    public DataSourceTransactionManager masterDataSourceTransactionManager(
            @Qualifier("ds1")DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }


    @Bean("sqlSessionTemplatePrimary")
    @Primary
    public SqlSessionTemplate masterSqlSessionTemplate(
            @Qualifier("sqlSessionFactoryPrimary") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

第二数据源配置

@Configuration
@MapperScan(basePackages = {"com.xin.tianye.other.mapper"}, sqlSessionTemplateRef = "sqlSessionTemplateSecond")
public class MybatisDbBConfig {

    @Bean("sqlSessionFactorySecond")
    public SqlSessionFactory masterSqlSessionFactory(
            @Qualifier("ds2") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //如果使用xml 的话这里配置
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:secondmapper/*Mapper.xml"));
        return bean.getObject();
    }

    //事务
    @Bean(name = "transactionManagerSecond")
    public DataSourceTransactionManager masterDataSourceTransactionManager(
            @Qualifier("ds2")DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }


    @Bean("sqlSessionTemplateSecond")
    public SqlSessionTemplate masterSqlSessionTemplate(
            @Qualifier("sqlSessionFactorySecond") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}


标题:多数据源配置
作者:Ulrica
地址:http://www.oceanworld.top/articles/2021/06/24/1624517336139.html

avatar

取消