SpringBoot使用druid配置多数据源问题

2023-03-13 08:01:30
目录
一、背景二、版本介绍三、项目结构四、maven依赖 五、yaml配置文件六、数据源配置文件七、启动类配置八、druid管理页面总结

一、背景

使用spring>

二、版本介绍

    spring>druid——1.2.11postgresql——12mysql——8.0.16maven——3.0idea——2019

    三、项目结构

    java>

    resource目录存放mapper.xml文件,按照数据源创建package 

     

    四、maven依赖 

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>2.0.4</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.2.11</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <scope>runtime</scope>
            </dependency>
            <!-- MySql驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>

    五、yaml配置文件

    server:
      port: 8081
    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
          web-stat-filter:
            enabled: true #是否启用StatFilter默认值true
            url-pattern: /*
            exclusions: /druid/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico
            session-stat-enable: true
            session-stat-max-count: 10
          stat-view-servlet:
            enabled: true #是否启用StatViewServlet默认值true
            url-pattern: /druid/*
            reset-enable: true
            login-username: admin
            login-password: admin
            allow:
     
          db1:
            username: postgres
            password: localhost
            url: jdbc:postgresql://localhost:5432/test
            driver-class-name: org.postgresql.Driver
            initial-size: 5  # 初始化大小
            min-idle: 5  # 最小
            max-active: 100  # 最大
            max-wait: 60000  # 配置获取连接等待超时的时间
            validation-query: select version()
            time-between-eviction-runs-millis: 60000  # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            min-evictable-idle-time-millis: 300000  # 指定一个空闲连接最少空闲多久后可被清除,单位是毫秒
            filters: config,wall,stat  # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
            # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
            connectionProperties: druid.stat.slowSqlMillis=200;druid.stat.logSlowSql=true;config.decrypt=false
            test-while-idle: true
            test-on-borrow: true
            test-on-return: false
            # 是否缓存preparedStatement,也就是PSCache  官方建议MySQL下建议关闭   个人建议如果想用SQL防火墙 建议打开
            pool-prepared-statements: true
            max-pool-prepared-statement-per-connection-size: 20
     
          db2:
            username: root
            password: localhost
            url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
            driver-class-name: com.mysql.cj.jdbc.Driver
            initial-size: 5  # 初始化大小
            min-idle: 5  # 最小
            max-active: 100  # 最大
            max-wait: 60000  # 配置获取连接等待超时的时间
            validation-query: select 'x'
            time-between-eviction-runs-millis: 60000  # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            min-evictable-idle-time-millis: 300000  # 指定一个空闲连接最少空闲多久后可被清除,单位是毫秒
            filters: config,wall,stat  # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
            # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
            connectionProperties: druid.stat.slowSqlMillis=200;druid.stat.logSlowSql=true;config.decrypt=false
            test-while-idle: true
            test-on-borrow: true
            test-on-return: false
            # 是否缓存preparedStatement,也就是PSCache  官方建议MySQL下建议关闭   个人建议如果想用SQL防火墙 建议打开
            pool-prepared-statements: true
            max-pool-prepared-statement-per-connection-size: 20
     
    mybatis:
      mapper-locations: classpath:com/demo/mapper/*.xml
      type-aliases-package: com.demo.entity
      configuration:
        log-impl:
        mapUnderscoreToCamelCase: true
     
    #showSql
    logging:
      level:
        java.sql: debug
        org.apache.ibatis: debug
        com.demo.mapper: debug
      config: classpath:logback-spring.xml

    六、数据源配置文件

    @Configuration
    @MapperScan(basePackages = "com.demo.mapper.postgre.**", sqlSessionFactoryRef = "oneSqlSessionFactory")
    public class DataSourceConfig1 {
        // 将这个对象放入Spring容器中
        @Bean(name = "oneDataSource")
        // 表示这个数据源是默认数据源
        @Primary
        // 读取application.properties中的配置参数映射成为一个对象
        // prefix表示参数的前缀
        @ConfigurationProperties(prefix = "spring.datasource.druid.db1")
        public DataSource getDateSource1() {
            return DataSourceBuilder.create().type(DruidDataSource.class).build();
        }
     
        @Bean(name = "oneSqlSessionFactory")
        // 表示这个数据源是默认数据源
        @Primary
        // @Qualifier表示查找Spring容器中名字为oneDataSource的对象
        public SqlSessionFactory oneSqlSessionFactory(@Qualifier("oneDataSource") DataSource datasource)
                throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(datasource);
            bean.setMapperLocations(
                    // 设置mybatis的xml所在位置
                    new PathMatchingResourcePatternResolver().getResources("classpath*:com.demo.mapper.postgre/*.xml"));
            return bean.getObject();
        }
     
        @Bean("oneSqlSessionTemplate")
        // 表示这个数据源是默认数据源
        @Primary
        public SqlSessionTemplate oneSqlSessionTemplate(
                @Qualifier("oneSqlSessionFactory") SqlSessionFactory sessionFactory) {
            return new SqlSessionTemplate(sessionFactory);
        }
     
    }
    @Configuration
    @MapperScan(basePackages = "com.demo.mapper.mysql", sqlSessionFactoryRef = "twoSqlSessionFactory")
    public class DataSourceConfig2 {
        // 将这个对象放入Spring容器中
        @Bean(name = "twoDataSource")
        // 读取application.properties中的配置参数映射成为一个对象
        // prefix表示参数的前缀
        @ConfigurationProperties(prefix = "spring.datasource.druid.db2")
        public DataSource getDateSource1() {
            return DataSourceBuilder.create().type(DruidDataSource.class).build();
        }
     
        @Bean(name = "twoSqlSessionFactory")
        // 表示这个数据源是默认数据源
        //@Primary
        // @Qualifier表示查找Spring容器中名字为oneDataSource的对象
        public SqlSessionFactory oneSqlSessionFactory(@Qualifier("twoDataSource") DataSource datasource)
                throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(datasource);
            bean.setMapperLocations(
                    // 设置mybatis的xml所在位置
                    new PathMatchingResourcePatternResolver().getResources("classpath*:com.demo.mapper.mysql/*.xml"));
            return bean.getObject();
        }
     
        @Bean("twoSqlSessionTemplate")
        // 表示这个数据源是默认数据源
        //@Primary
        public SqlSessionTemplate oneSqlSessionTemplate(
                @Qualifier("twoSqlSessionFactory") SqlSessionFactory sessionFactory) {
            return new SqlSessionTemplate(sessionFactory);
        }
     
    }

    七、启动类配置

    关键点:去除 >

    @MapperScan("com.demo.mapper")
    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    public class DemoApplication {
     
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication .class, args);
        }
    }

    八、druid管理页面

    输入地址>

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持易采站长站。