美文网首页
spring boot 整合多数据源

spring boot 整合多数据源

作者: JAVA弑云 | 来源:发表于2019-12-16 16:38 被阅读0次

整合不同的数据源就需要在yml文件里配置不同的数据库.以及账号密码,下面是我的代码示例

datasource:
  hikari:
    maximum-pool-size: 2
    minimum-idle: 1
    idle-timeout: 600000
    max-lifetime: 1800000
    connection-timeout: 500
    login-timeout: 500
    validation-timeout: 1000
    initialization-fail-timeout: 1000
  datasource1:
    jdbc-url: jdbc:mysql://xxx.rds.aliyuncs.com:port/data_libary?serverTimezone=CTT&useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
    password: 123456
    username: 账号
    driver-class-name: com.mysql.cj.jdbc.Driver
  datasource2:
    jdbc-url: jdbc:mysql://xxx.rds.aliyuncs.com:port/data_libary?serverTimezone=CTT&useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
    password: 123456
    username: 账号
    driver-class-name: com.mysql.cj.jdbc.Driver
  datasource3:
    jdbc-url: jdbc:mysql://xxx.rds.aliyuncs.com:port/data_libary?serverTimezone=CTT&useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
    password: 123456
    username: 账号
    driver-class-name: com.mysql.cj.jdbc.Driver
  datasource4:
    jdbc-url: jdbc:mysql://xxx.rds.aliyuncs.com:port/data_libary?serverTimezone=CTT&useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
    password: 123456
    username: 账号
    driver-class-name: com.mysql.cj.jdbc.Driver

如上图代码所示.以datasource为前缀后面有数字的都是不同的数据源配置,我这边配置了四个数据源
下面展示配置数据源的代码

@Configuration
@MapperScan(basePackages = "com.application.datasource.datasouce1", sqlSessionTemplateRef  = "test1SqlSessionTemplate")
public class DataSource1Config {

    @Bean(name = "test1DataSource")
    @ConfigurationProperties(prefix = "datasource.datasouce1")
    @Primary
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "test1SqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/datasouce1/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "test1TransactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
        
        return dataSourceTransactionManager;
    }

    @Bean(name = "test1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

basePackages 配置的是扫描dao所在的路径,每个数据源不同的package,
classpath:mapper/datasouce1/*.xml这边配置的是mybatis的xml文件扫描路径
所以你只要这两处配置好其他就没问题了,当配置第二个第三个数据源的时候就将test1开头的名字改为test2,test3就可以了,只要区分不同的bean就可以配置成功,
@ConfigurationProperties(prefix = "datasource.datasouce1")中datasource.datasouce1指的就是yml文件中的的dataSource1的数据源,记得也得改成对应的数据源
@Primary的作用是当一个接口有多个bean实现的时候spring不知道如何选择,所以加上primary后就可以了,多个数据源配置类只能配置一个,
到此配置多数据源完成

相关文章

网友评论

      本文标题:spring boot 整合多数据源

      本文链接:https://www.haomeiwen.com/subject/admlyctx.html