Maison  >  Article  >  Java  >  Comment SpringBoot utilise Druid pour configurer plusieurs sources de données

Comment SpringBoot utilise Druid pour configurer plusieurs sources de données

WBOY
WBOYavant
2023-05-14 12:19:053704parcourir

1. Contexte

Utilisez Spring Boot pour configurer plusieurs sources de données. Les sources de données sont postgresql et mysql

2. .11

  • postgresql——2019

  • 3. Structure du projet

  • Répertoire du package Java
  • Le répertoire des ressources stocke le fichier mapper.xml et crée un package en fonction de la source de données

    .

  • 4. Dépendance 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>
  • 5. Fichier de configuration 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无法统计,&#39;wall&#39;用于防火墙
            # 通过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 &#39;x&#39;
            time-between-eviction-runs-millis: 60000  # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            min-evictable-idle-time-millis: 300000  # 指定一个空闲连接最少空闲多久后可被清除,单位是毫秒
            filters: config,wall,stat  # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,&#39;wall&#39;用于防火墙
            # 通过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

    6. Fichier de configuration de la source de données

    @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);
        }
     
    }
  • 7. Configuration de la classe de démarrage

Points clés : supprimez l'exclusion = {DataSourceAutoConfiguration.class} et analysez le com .demo.mapper directory

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

8. Page de gestion Druid

Entrez l'adresse localhost://8081/druid, entrez admin/admin Comment SpringBoot utilise Druid pour configurer plusieurs sources de données

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer