• springboot 配置多数据源


    1、动态数据源配置在yml文件

    spring:
      datasource:
          type: com.alibaba.druid.pool.DruidDataSource
          # 初始化Druid
          druid:
            primary:
            # mysql数据库接地址
              jdbc-url: jdbc:mysql://**:3306/primary_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true
              username: **
              password: **
              driver-class-name: com.mysql.cj.jdbc.Driver
    
            school:
              jdbc-url: jdbc:mysql://**:3306/school?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true
              username: **
              password: **
              driver-class-name: com.mysql.cj.jdbc.Driver
    
          initial-size: 5
            # 最小空闲连接数 默认:0
          min-idle: 5
          # 最大连接数  默认:8
          max-active: 20
          # 获取连接等待超时的时间(毫秒) 默认:-1
          max-wait: 60000
          # 查询超时时间(秒)
          query-timeout: 90
          # 用来检测连接是否有效的sql,要求是一个查询语句
          validation-query: SELECT 1 FROM DUAL
          # 申请连接时检测连接可用性 默认:false
          test-on-borrow: false
          # 归还连接检测 默认:false
          test-on-return: false
          # 超时是否检测连接可用性
          test-while-idle: true
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接 (毫秒)
          time-between-eviction-runs-millis: 60000
          # 配置一个连接在池中最小生存的时间(毫秒,默认30分钟)
          min-evictable-idle-time-millis: 300000
          # 通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat;日志用的filter:log4j;防御sql注入的filter:wall
          filters: stat,slf4j
          # 慢SQL记录 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter
          filter:
            stat:
              log-slow-sql: true
              slow-sql-millis: 2000
              db-type: mysql
              # SQL合并 默认:false
              merge-sql: false
            wall:
              config:
                delete-allow: false
                drop-table-allow: false
                multi-statement-allow: true
              enabled: false
              db-type: mysql
    
          # 是否缓存PreparedStatement. PSCache对支持游标的数据库性能提升巨大,比如说oracle.在mysql下建议关闭.
          pool-prepared-statements: false
          # 每个连接上PSCache的大小
          max-pool-prepared-statement-per-connection-size: 20
          # 合并多个DruidDataSource的监控数据
          use-global-data-source-stat: true
    

      2、数据源切换类 不同数据源的mapper类放不同的package

    @Configuration
    @MapperScan(basePackages = "com.rbt.pen.mapper.primary", sqlSessionTemplateRef = "primarySqlSessionTemplate")
    public class PrimaryDataSourceConfig {
        /**
         * 创建 DataSource
         * @return
         */
        @Bean("primaryDataSource")
        @ConfigurationProperties("spring.datasource.druid.primary")
        public DataSource primaryDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        /**
         * 创建 SQL会话工厂
         * @param dataSource
         * @return
         * @throws Exception
         */
        @Bean("primarySqlSessionFactory")
        public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            sqlSessionFactoryBean.setDataSource(dataSource);
            sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
            return sqlSessionFactoryBean.getObject();
        }
    
        /**
         * 创建 事务管理器
         * @param dataSource
         * @return
         */
        @Bean("primaryTransactionManager")
        public DataSourceTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        /**
         * 创建用户 SqlSession模板
         * @param sqlSessionFactory
         * @return
         */
        @Bean("primarySqlSessionTemplate")
        public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    Configuration
    @MapperScan(basePackages = "com.rbt.pen.mapper.school", sqlSessionTemplateRef = "schoolSqlSessionTemplate")
    public class SchoolDataSourceConfig {
        /**
         * 创建 DataSource
         * @return
         */
        @Bean("schoolDataSource")
        @ConfigurationProperties("spring.datasource.druid.school")
        public DataSource schoolDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        /**
         * 创建 SQL会话工厂
         * @param dataSource
         * @return
         * @throws Exception
         */
        @Bean("schoolSqlSessionFactory")
        public SqlSessionFactory schoolSqlSessionFactory(@Qualifier("schoolDataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            sqlSessionFactoryBean.setDataSource(dataSource);
            sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
    
            return sqlSessionFactoryBean.getObject();
        }
    
        /**
         * 创建 事务管理器
         * @param dataSource
         * @return
         */
        @Bean("schoolTransactionManager")
        public DataSourceTransactionManager schoolTransactionManager(@Qualifier("schoolDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        /**
         * 创建用户 SqlSession模板
         * @param sqlSessionFactory
         * @return
         */
        @Bean("schoolSqlSessionTemplate")
        public SqlSessionTemplate schoolSqlSessionTemplate(@Qualifier("schoolSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    

      3、将自定义注解启动

    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    @ComponentScan(basePackages = {"com.rbt"})
    
    public class PenApplication {
    
        public static void main(String[] args) {
            try{
                SpringApplication.run(PenApplication.class, args);
    
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
    }
  • 相关阅读:
    C#中的赋值运算符及其运算规则
    值类型与引用类型
    变量的作用域和生存周期
    Eclipse 和 Vim 协同使用使用Eclim插件开发Python程序
    使用合适的设计模式一步步优化前端代码
    Vue.js 服务端渲染业务入门实践
    翻译连载 | 第 9 章:递归(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
    翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》 第 7 章: 闭包 vs 对象
    翻译连载 | 第 10 章:异步的函数式(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
    微信小程序教学第四章第二节(含视频):小程序中级实战教程:详情视图渲染
  • 原文地址:https://www.cnblogs.com/ampl/p/12195562.html
Copyright © 2020-2023  润新知