SpringBoot 多数据源

一、配置数据源

@Configuration
@Slf4j
public class DataSourceConfig {

    @Bean(name = "datasource1")
    @Primary
    @Qualifier("datasource1")
    @ConfigurationProperties(prefix="spring.datasource.datasource1" )
    public DataSource datasource1() {
        log.info("datasource1数据库连接创建中.......");
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

    @Bean(name = "datasource2")
    @Qualifier("datasource2")
    @ConfigurationProperties(prefix="spring.datasource.datasource2")
    public DataSource datasource2() {
        log.info("datasource2数据库连接创建中......");
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

    @Bean(name = "datasource3")
    @Qualifier("datasource3")
    @ConfigurationProperties(prefix="spring.datasource.datasource3")
    public DataSource datasource1() {
        log.info("datasource3数据库连接创建中......");
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

}

 

二、配置Factory

@Configuration
//该注解的参数对应的类必须存在,否则不解析该注解修饰的配置类
@ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })
public class MybatisConfig {

    //第一个数据源
    @Configuration
    @MapperScan(basePackages = {"com.common.boot..datasource1.mapper*"},
            sqlSessionFactoryRef = "datasource1cloudSqlSessionFactory")
    public static class DataSource1MybatisConfig{
        private final DataSource dataSource;

        public CloudMybatisConfig(@Qualifier("dataSource1") DataSource dataSource) {
            this.dataSource = dataSource;
        }

        //创建SqlSessionFactory
        @Bean
        public SqlSessionFactory datesource1SqlSessionFactory() throws Exception {
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
            factoryBean.setDataSource(dataSource);
            factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources("classpath:/mappers/datasource1/*Mapper.xml"));
            return  factoryBean.getObject();
        }

        //利用SqlSessionFactory创建SqlSessionTemplate
        @Bean
        public SqlSessionTemplate datasource1SqlSessionTemplate() throws Exception {
            return new SqlSessionTemplate(datasource1SqlSessionFactory());
        }

        //事务
        @Bean
        public PlatformTransactionManager cloudTransactionManager(){
            return new DataSourceTransactionManager(dataSource);
        }

    }


    //第二个数据源
    @Configuration
    @MapperScan(basePackages = {"com.common.boot.datasource2.mapper.*"},
            sqlSessionFactoryRef = "datesource2SqlSessionFactory")
    public static class Datesource2MybatisConfig{
        private final DataSource dataSource;

        public HubMybatisConfig(@Qualifier("dataSource2") DataSource dataSource) {
            this.dataSource = dataSource;
        }

        //创建SqlSessionFactory
        @Bean
        public SqlSessionFactory datasource2SqlSessionFactory() throws Exception {
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
            factoryBean.setDataSource(dataSource);
            factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources("classpath:/mappers/datasource2/*.xml"));
            //factoryBean.setConfigLocation(new ClassPathResource("/mapper/mybatis-config.xml"));
            return  factoryBean.getObject();
        }

        //利用SqlSessionFactory创建SqlSessionTemplate
        @Bean
        public SqlSessionTemplate datasource2SqlSessionTemplate() throws Exception {
            return new SqlSessionTemplate(datasource2SqlSessionFactory());
        }

        //事务
        @Bean
        public PlatformTransactionManager datasource2TransactionManager(){
            return new DataSourceTransactionManager(dataSource);
        }
    }

    //第三个数据源
    @Configuration
    @MapperScan(basePackages = {"com.common.boot.dataSource3.mapper.*"},
            sqlSessionFactoryRef = "datasource3SqlSessionFactory")
    public static class Datasource3MybatisConfig{
        private final DataSource dataSource;

        public Datasource3MybatisConfig(@Qualifier("dataSource3") DataSource dataSource) {
            this.dataSource = dataSource;
        }

        //创建SqlSessionFactory
        @Bean
        public SqlSessionFactory changatSqlSessionFactory() throws Exception {
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
            factoryBean.setDataSource(dataSource);
            factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources("classpath:/mappers/datasource3/*.xml"));
            //factoryBean.setConfigLocation(new ClassPathResource("/mapper/mybatis-config.xml"));
            return  factoryBean.getObject();
        }

        //利用SqlSessionFactory创建SqlSessionTemplate
        @Bean
        public SqlSessionTemplate datasource3SqlSessionTemplate() throws Exception {
            return new SqlSessionTemplate(datasource3SqlSessionFactory());
        }

        //事务
        @Bean
        public PlatformTransactionManager datasource3TransactionManager(){
            return new DataSourceTransactionManager(dataSource);
        }
    }

}

 

三、application.yml配置

spring:
    datasource:
        datasource1:
            type: com.zaxxer.hikari.HikariDataSource
            jdbc-url: jdbc:mysql://****:3306/****?useunicode=true&characterEncoding=utf8
            username: user
            password: pass
            driver-class-name: com.mysql.cj.jdbc.Driver
        datasource2:
            type: com.zaxxer.hikari.HikariDataSource
            jdbc-url: jdbc:mysql://****:3306/*****?useunicode=true&characterEncoding=utf8
            username: user
            password: pass
            driver-class-name: com.mysql.cj.jdbc.Driver
        changat:
            type: com.zaxxer.hikari.HikariDataSource
            jdbc-url: jdbc:mysql://***:3306/***?useUnicode=true&characterEncoding=utf-8
            username: user
            password: pass
            driver-class-name: com.mysql.cj.jdbc.Driver
      #hikari数据库连接池
    hikari:
        pool-name: PtaService_HikariCP
        minimum-idle: 100 #最小空闲连接数量
        idle-timeout: 180000 #空闲连接存活最大时间,默认600000(10分钟)
        maximum-pool-size: 300 #连接池最大连接数,默认是10
        auto-commit: true  #此属性控制从池返回的连接的默认自动提交行为,默认值:true
        max-lifetime: 60000 #此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
        connection-timeout: 30000 #数据库连接超时时间,默认30秒,即30000
        connection-test-query: SELECT 1

 

posted on 2020-02-11 20:42  levi~liu  阅读(240)  评论(0)    收藏  举报

导航