• springboot+mybatis 配置双数据源(mysql,oracle,sqlserver,db2)


    以上如图为项目文件夹目录。

    1,首先配置application.yml 配置文件

    server:
      port: 8084
      tomcat:
        uri-encoding: utf-8
      servlet:
        context-path: /services
    
    #spring:
    #  datasource:
    #    type: com.alibaba.druid.pool.DruidDataSource
    #    #    name: skynet
    #    driver-class-name: com.mysql.jdbc.Driver
    #    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false
    #    username: root
    #    password: root
    #
    #
    #  jpa:
    #    show-sql: true  #是否在控制台打印sql语句
    
    # 自定义的mysql主数据源配置信息
    primary:
      datasource:
        #druid相关配置
        druid:
          #监控统计拦截的filters
          filters: stat
          driverClassName: com.mysql.jdbc.Driver
          #配置基本属性
          url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
          username: root
          password: root
          #配置初始化大小/最小/最大
          initialSize: 1
          minIdle: 1
          maxActive: 20
          #获取连接等待超时时间
          maxWait: 60000
          #间隔多久进行一次检测,检测需要关闭的空闲连接
          timeBetweenEvictionRunsMillis: 60000
          #一个连接在池中最小生存的时间
          minEvictableIdleTimeMillis: 300000
          validationQuery: SELECT 'x'
          testWhileIdle: true
          testOnBorrow: false
          testOnReturn: false
          #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
          poolPreparedStatements: false
          maxPoolPreparedStatementPerConnectionSize: 20
    
    
    # 自定义的sqlserver数据源配置信息 或者oracle, db2 数据库,只需要更改driverClassName以及数据库基本属性
    back:
      datasource:
        #druid相关配置
        druid:
          #监控统计拦截的filters
          filters: stat
          driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
          #配置基本属性
          url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=tiuweb_drgs
          username: admin
          password: 123
          #配置初始化大小/最小/最大
          initialSize: 1
          minIdle: 1
          maxActive: 20
          #获取连接等待超时时间
          maxWait: 60000
          #间隔多久进行一次检测,检测需要关闭的空闲连接
          timeBetweenEvictionRunsMillis: 60000
          #一个连接在池中最小生存的时间
          minEvictableIdleTimeMillis: 300000
          validationQuery: SELECT 'x'
          testWhileIdle: true
          testOnBorrow: false
          testOnReturn: false
          #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
          poolPreparedStatements: true
          maxPoolPreparedStatementPerConnectionSize: 20
    
      jackson:
        time-zone: GMT+8
        date-format: yyyy-MM-dd HH:mm:ss
      resources:
        static-locations: classpath:/static/,classpath:/views/
    
    #mybatis
    mybatis:
      mapper-locations: classpath:mapper/**/*.xml
      configuration:
        map-underscore-to-camel-case: true
        default-fetch-size: 500
        default-statement-timeout: 80
    
    # mybatis 分页插件 需要配置pom.xml坐标
    pagehelper:
      helperDialect: sqlserver
      reasonable: true
      supportMethodsArguments: true
      pageSizeZero: true
      params: count=countSql
    
    #logback日志配置 需要配置pom.xml坐标以及在resources下配置config配置文件
    logging:
      config: classpath:config/logback-spring.xml
      level:
        com.tiuweb.skynet.dao: DEBUG
      file:
        path: DRGS_LOG  #日志保存文件夹

    2,配置config数据源配置文件 PrimaryDataBaseConfig 和 BackDataBaseConfig

    package com.tw.skynet.config;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import lombok.Data;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.stereotype.Component;
    
    import javax.sql.DataSource;
    import java.sql.SQLException;
    
    
    @Data
    @Configuration
    @Component
    // 前缀为primary.datasource.druid的配置信息
    @ConfigurationProperties(prefix = "primary.datasource.druid")
    @MapperScan(basePackages = PrimaryDataBaseConfig.PACKAGE, sqlSessionFactoryRef = "primarySqlSessionFactory")
    public class PrimaryDataBaseConfig {
    
        /**
         * dao层的包路径
         */
        static final String PACKAGE = "com.tw.skynet.dao";
    
        /**
         * mapper文件的相对路径
         */
        private static final String MAPPER_LOCATION = "classpath:mapper/primary/*.xml";
    
        private String filters;
        private String url;
        private String username;
        private String password;
        private String driverClassName;
        private int initialSize;
        private int minIdle;
        private int maxActive;
        private long maxWait;
        private long timeBetweenEvictionRunsMillis;
        private long minEvictableIdleTimeMillis;
        private String validationQuery;
        private boolean testWhileIdle;
        private boolean testOnBorrow;
        private boolean testOnReturn;
        private boolean poolPreparedStatements;
        private int maxPoolPreparedStatementPerConnectionSize;
    
        // 主数据源使用@Primary注解进行标识
        @Primary
        @Bean(name = "primaryDataSource")
        public DataSource primaryDataSource() throws SQLException {
            DruidDataSource druid = new DruidDataSource();
            // 监控统计拦截的filters
            druid.setFilters(filters);
    
            // 配置基本属性
            druid.setDriverClassName(driverClassName);
            druid.setUsername(username);
            druid.setPassword(password);
            druid.setUrl(url);
    
            //初始化时建立物理连接的个数
            druid.setInitialSize(initialSize);
            //最大连接池数量
            druid.setMaxActive(maxActive);
            //最小连接池数量
            druid.setMinIdle(minIdle);
            //获取连接时最大等待时间,单位毫秒。
            druid.setMaxWait(maxWait);
            //间隔多久进行一次检测,检测需要关闭的空闲连接
            druid.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
            //一个连接在池中最小生存的时间
            druid.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
            //用来检测连接是否有效的sql
            druid.setValidationQuery(validationQuery);
            //建议配置为true,不影响性能,并且保证安全性。
            druid.setTestWhileIdle(testWhileIdle);
            //申请连接时执行validationQuery检测连接是否有效
            druid.setTestOnBorrow(testOnBorrow);
            druid.setTestOnReturn(testOnReturn);
            //是否缓存preparedStatement,也就是PSCache,oracle设为true,mysql设为false。分库分表较多推荐设置为false
            druid.setPoolPreparedStatements(poolPreparedStatements);
            // 打开PSCache时,指定每个连接上PSCache的大小
            druid.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
    
            return druid;
        }
    
        // 创建该数据源的事务管理
        @Primary
        @Bean(name = "primaryTransactionManager")
        public DataSourceTransactionManager primaryTransactionManager() throws SQLException {
            return new DataSourceTransactionManager(primaryDataSource());
        }
    
        // 创建Mybatis的连接会话工厂实例
        @Primary
        @Bean(name = "primarySqlSessionFactory")
        public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource primaryDataSource) throws Exception {
            final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(primaryDataSource);  // 设置数据源bean
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources(PrimaryDataBaseConfig.MAPPER_LOCATION));  // 设置mapper文件路径
    
            return sessionFactory.getObject();
        }
    }
    package com.tw.skynet.config;
    
    
    import com.alibaba.druid.pool.DruidDataSource;
    import lombok.Data;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.stereotype.Component;
    
    import javax.sql.DataSource;
    import java.sql.SQLException;
    
    /**
     * @Description: 后台数据源配置类
     */
    
    @Data
    @Configuration
    @Component
    @ConfigurationProperties(prefix = "back.datasource.druid")
    @MapperScan(basePackages = BackDataBaseConfig.PACKAGE, sqlSessionFactoryRef = "backSqlSessionFactory")
    public class BackDataBaseConfig {
    
        /**
         * dao层的包路径
         */
        static final String PACKAGE = "com.tw.skynet.dao.back";
    
        /**
         * mapper文件的相对路径
         */
        private static final String MAPPER_LOCATION = "classpath:mapper/back/*.xml";
    
        private String filters;
        private String url;
        private String username;
        private String password;
        private String driverClassName;
        private int initialSize;
        private int minIdle;
        private int maxActive;
        private long maxWait;
        private long timeBetweenEvictionRunsMillis;
        private long minEvictableIdleTimeMillis;
        private String validationQuery;
        private boolean testWhileIdle;
        private boolean testOnBorrow;
        private boolean testOnReturn;
        private boolean poolPreparedStatements;
        private int maxPoolPreparedStatementPerConnectionSize;
    
        @Bean(name = "backDataSource")
        public DataSource backDataSource() throws SQLException {
            DruidDataSource druid = new DruidDataSource();
            // 监控统计拦截的filters
            druid.setFilters(filters);
    
            // 配置基本属性
            druid.setDriverClassName(driverClassName);
            druid.setUsername(username);
            druid.setPassword(password);
            druid.setUrl(url);
    
            //初始化时建立物理连接的个数
            druid.setInitialSize(initialSize);
            //最大连接池数量
            druid.setMaxActive(maxActive);
            //最小连接池数量
            druid.setMinIdle(minIdle);
            //获取连接时最大等待时间,单位毫秒。
            druid.setMaxWait(maxWait);
            //间隔多久进行一次检测,检测需要关闭的空闲连接
            druid.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
            //一个连接在池中最小生存的时间
            druid.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
            //用来检测连接是否有效的sql
            druid.setValidationQuery(validationQuery);
            //建议配置为true,不影响性能,并且保证安全性。
            druid.setTestWhileIdle(testWhileIdle);
            //申请连接时执行validationQuery检测连接是否有效
            druid.setTestOnBorrow(testOnBorrow);
            druid.setTestOnReturn(testOnReturn);
            //是否缓存preparedStatement,也就是PSCache,oracle设为true,mysql设为false。分库分表较多推荐设置为false
            druid.setPoolPreparedStatements(poolPreparedStatements);
            // 打开PSCache时,指定每个连接上PSCache的大小
            druid.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
    
            return druid;
        }
    
        @Bean(name = "backTransactionManager")
        public DataSourceTransactionManager backTransactionManager() throws SQLException {
            return new DataSourceTransactionManager(backDataSource());
        }
    
        @Bean(name = "backSqlSessionFactory")
        public SqlSessionFactory backSqlSessionFactory(@Qualifier("backDataSource") DataSource backDataSource) throws Exception {
            final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(backDataSource);
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources(BackDataBaseConfig.MAPPER_LOCATION));
    
            return sessionFactory.getObject();
        }
    }

    3,以上配置就完成了,接下来就是dao文件夹和mapper文件夹分包

     

     现在所有配置已经完了,最后不要忘记pom.xml 导入所需要的数据库驱动jar包

  • 相关阅读:
    如何在服务器上添加本地驱动器
    JQ查找到带有某个字符,并起类名,然后替换这个某个字符
    使用IWMS的网站打开显示“未能加载文件或程序集”,解决方案
    表头固顶结构
    在页面中有overflow-y:auto属性的div,当出现滚动条,点击返回顶部按钮,内容回这个div最顶部
    在文档页面整个区域出现导航随内容滚动高亮显示效果
    在文档页面局部出现导航随内容滚动高亮显示效果
    在Hmtl页面中只让其中单独的一个div隐藏滚动条但是仍可滚动浏览下边的内容
    GC参考手册 —— GC 调优(工具篇)
    GC参考手册 —— GC 算法(实现篇)
  • 原文地址:https://www.cnblogs.com/yydxh/p/15692686.html
Copyright © 2020-2023  润新知