美文网首页
SpringBoot-Druid-Dynamic(多数据源)

SpringBoot-Druid-Dynamic(多数据源)

作者: KenChen_939 | 来源:发表于2021-12-15 17:43 被阅读0次

Druid:基于Apache2.0协议 阿里开源的数据库连接池
Dynamic:基于springBoot的快速集成多数据源的启动器

  • Druid能做什么

Druid不仅仅是一个数据库连接池
1.监控数据库访问性能,内置提供了一个StatFilter插件,能详细统计SQL执行性能。
2.数据库密码加密
3.SQL执行日志,支持Common-Logging,Log4,JdkLog,可以按需切换
4.扩展JDBC,如对JDBC层有变成要求,可以通过Druid提供的Filter机制方便的编写扩展插件。

Druid监控配置

  • 修改application
##### 连接池配置 #######
# 过滤器设置(第一个stat很重要,没有的话会监控不到SQL)
spring.datasource.druid.filters=stat,wall,log4j2

##### WebStatFilter配置 #######
#启用StatFilter
spring.datasource.druid.web-stat-filter.enabled=true
#添加过滤规则
spring.datasource.druid.web-stat-filter.url-pattern=/*
#排除一些不必要的url
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
#开启session统计功能
spring.datasource.druid.web-stat-filter.session-stat-enable=true
#缺省sessionStatMaxCount是1000个
spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
#spring.datasource.druid.web-stat-filter.principal-session-name=
#spring.datasource.druid.web-stat-filter.principal-cookie-name=
#spring.datasource.druid.web-stat-filter.profile-enable=

##### StatViewServlet配置 #######
#启用内置的监控页面
spring.datasource.druid.stat-view-servlet.enabled=true
#内置监控页面的地址
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
#关闭 Reset All 功能
spring.datasource.druid.stat-view-servlet.reset-enable=false
#设置登录用户名
spring.datasource.druid.stat-view-servlet.login-username=admin
#设置登录密码
spring.datasource.druid.stat-view-servlet.login-password=123
#白名单(如果allow没有配置或者为空,则允许所有访问)
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
#黑名单(deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝)
spring.datasource.druid.stat-view-servlet.deny=
  • 重启项目后访问改地址,输入用户名密码即可
http://ip:port/druid/login.html
  • Dynamic能做什么

它是一个基于SpringBoot的快速集成多数据源的启动器
1.支持数据源分组,读写分离,一主多从等。
2.数据库敏感信息加密(可自定义)
3.支持无数据源启动及懒加载数据源(需要的时候再创建连接)
4.提供并简化对Druid等的快速集成

Dynamic如何切换数据源

使用@DS注解。该注解可以使用在方法上或者类上。同时存在则采用就近原则。方法注解优先于类注解
(使用在service实现类上即可,使用默认数据源则不需要使用注解)

@Service
@DS("slave_1")
public class ShengshiStudentManagementServiceImpl extends SysServiceImpl<ShengshiStuManagementMapper, ShengshiStuManagement> implements ShengshiStuManagementService {

    @Override
    public ShengshiStuManagement getById(Serializable id) {
        return baseMapper.selectById(id);
    }

}

------------------------------------实验------------------------------------

1. Maven配置

                <!--数据库连接池--> 
      <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid-version}</version>
        </dependency>

<!--        多数据库连接-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>${dynamic-version}</version>
        </dependency>

2.数据源配置

spring:
  datasource:
    druid:
      initial-size: 10
      max-active: 100
      min-idle: 3
      max-wait: 5000
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 100
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源
      datasource:
        master:
          url: jdbc:mysql://127.0.0.1:3306/edu_test
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver   # 3.2.0开始支持SPI可省略此配置
        slave_1:
          url: jdbc:mysql://127.0.0.1:3306/shengshi
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver
#        slave_2:
#          url: ENC(xxxxx) # 内置加密,使用请查看详细文档
#          username: ENC(xxxxx)
#          password: ENC(xxxxx)
#          driver-class-name: com.mysql.jdbc.Driver
#          schema: db/schema.sql # 配置则生效,自动初始化表结构
#          data: db/data.sql # 配置则生效,自动初始化数据
#          continue-on-error: true # 默认true,初始化失败是否继续
#          separator: ";" # sql默认分号分隔符

按照业务自己写好DAO层,secive、controller等就OK,在service实现类上使用@DS注解来切换数据源,默认数据源不需要使用注解。

注意注意注意
启动类上修改注解

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)

示例代码Git地址

参考文献
Druid GitHub地址
Dynamic GitHub地址

相关文章

网友评论

      本文标题:SpringBoot-Druid-Dynamic(多数据源)

      本文链接:https://www.haomeiwen.com/subject/btcpfrtx.html