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)