zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    
    }
  • 相关阅读:
    ZOJ 3765 Lights (zju March I)伸展树Splay
    UVA 11922 伸展树Splay 第一题
    UVALive 4794 Sharing Chocolate DP
    ZOJ 3757 Alice and Bod 模拟
    UVALive 3983 捡垃圾的机器人 DP
    UVA 10891 SUM游戏 DP
    poj 1328 Radar Installatio【贪心】
    poj 3264 Balanced Lineup【RMQ-ST查询区间最大最小值之差 +模板应用】
    【转】RMQ-ST算法详解
    poj 3083 Children of the Candy Corn 【条件约束dfs搜索 + bfs搜索】【复习搜索题目一定要看这道题目】
  • 原文地址:https://www.cnblogs.com/ampl/p/12195562.html
Copyright © 2011-2022 走看看