SpringBoot多数据源下,Druid监控统计的使用
上一篇遗留的问题,集成的durid无法很好地监控多数据源,现在予以解决。
解决方法是,把springboot默认使用的数据源HikariDataSource更换为DruidDataSource,并做相应的配置调整。
1 、更改yml配置文件:
数据源配置,添加一大堆,也许有些正是你需要的呢?因此写上了。这里真正要用的并不多,主要的那一个已经给圈起来了。看图(ds1的配置):
ds2的配置大同小异。下面把完整的yml配置文件贴出来:
application.yml
spring:
datasource:
ds1: #数据源1
url: jdbc:mysql://localhost:3306/ds1
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
# 配置监控统计拦截的filters
filters: stat,wall,slf4j
# 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时
initialSize: 5
# 最小连接池数量
minIdle: 5
# 最大连接池数量
maxActive: 10
# 获取连接时最大等待时间,单位毫秒。配置了 maxWait 之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置 useUnfairLock 属性为 true 使用非公平锁。
maxWait: 60000
# Destroy 线程会检测连接的间隔时间,如果连接空闲时间大于等于 minEvictableIdleTimeMillis 则关闭物理连接。
timeBetweenEvictionRunsMillis: 60000
# 连接保持空闲而不被驱逐的最小时间
minEvictableIdleTimeMillis: 300000
# 用来检测连接是否有效的 sql 因数据库方言而异, 例如 oracle 应该写成 SELECT 1 FROM DUAL
validationQuery: SELECT 1
# 建议配置为 true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于 timeBetweenEvictionRunsMillis,执行 validationQuery 检测连接是否有效。
testWhileIdle: true
# 申请连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
testOnBorrow: false
# 归还连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
testOnReturn: false
# 是否自动回收超时连接
removeAbandoned: true
# 超时时间 (以秒数为单位)
remove-abandoned-timeout: 1800
ds2: #数据源2
url: jdbc:mysql://localhost:3306/ds2
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
# 配置监控统计拦截的filters
filters: stat,wall,slf4j
# 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时
ini接池数tialSize: 6
# # 最小连量
minIdle: 6
# 最大连接池数量
maxActive: 10
# 获取连接时最大等待时间,单位毫秒。配置了 maxWait 之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置 useUnfairLock 属性为 true 使用非公平锁。
maxWait: 60000
# Destroy 线程会检测连接的间隔时间,如果连接空闲时间大于等于 minEvictableIdleTimeMillis 则关闭物理连接。
timeBetweenEvictionRunsMillis: 60000
# 连接保持空闲而不被驱逐的最小时间
minEvictableIdleTimeMillis: 300000
# 用来检测连接是否有效的 sql 因数据库方言而异, 例如 oracle 应该写成 SELECT 1 FROM DUAL
validationQuery: SELECT 1
# 建议配置为 true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于 timeBetweenEvictionRunsMillis,执行 validationQuery 检测连接是否有效。
testWhileIdle: true
# 申请连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
testOnBorrow: false
# 归还连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
testOnReturn: false
# 是否自动回收超时连接
removeAbandoned: true
# 超时时间 (以秒数为单位)
remove-abandoned-timeout: 1800
druid:
aop-patterns: com.example.demo.* #监控SpringBean
filters: stat,wall # 底层开启功能,stat(sql监控),wall(防火墙)
stat-view-servlet: # 配置监控页功能
enabled: true
login-username: admin
login-password: admin
resetEnable: false
web-stat-filter: # 监控web
enabled: true
urlPattern: /*
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
filter:
stat: # 对上面filters里面的stat的详细配置
slow-sql-millis: 1000
logSlowSql: true
enabled: true
wall:
enabled: true
config:
drop-table-allow: false
# 配置mybatis规则
mybatis:
# config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: false
2、修改数据源配置文件
这里就是把spring默认的数据源进行更换。
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource.ds1") //读取application.yml中的配置参数映射成为一个对象
public DataSource dataSource() {
// return DataSourceBuilder.create().build(); //默认HikariDataSource
return DataSourceBuilder.create().type(DruidDataSource.class).build();//改为DruidDataSource
}
Datasource1Configuration与Datasource2Configuration中都是同样的修改。
3、测试
把项目运行起来,浏览器地址中输入:http://localhost:8080/druid/index.html
输入admin/admin登录。
调用一下测试接口,然后就能在druid监控页面中看到:
可以看到,两个数据源的信息都能看到,响应的sql监控也能正常显示。
本篇就到这里。作为一个后台接口服务,接口的文档也是必不可少。下一篇,在这个demo项目中集成knife4j,一个超牛的文档工具。