项目场景:
项目基于springboot2.3.3 druid1.2.1
问题描述:
配置druid监控页面,配置druid监控属性如下
spring:
datasource:
druid:
# 监控过滤器
webStatFilter:
enabled: true
# druid 监控页面
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: admin
login-password: admin
# 状态监控
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
db-type: sqlserver
wall:
config:
multi-statement-allow: true
项目运行后访问localhost:8080/druid/ 监控页报404
试着手动配置
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
Map<String,String> initParams = new HashMap<>();
initParams.put("loginUsername","admin");
initParams.put("loginPassword","admin");
initParams.put("allow","");//value为空字符串的话,默认允许所有地址访问
bean.setInitParameters(initParams);
return bean;
}
发现可以访问监控页,确定执行了sql, 但是sql监控页下的是没有记录的
原因分析:
因为项目是采用多数据源的方式,stat并没有被指定到确定的数据源上,所以需要手动指定
解决方方式:
在主数据源上指定
@Bean
@ConfigurationProperties("spring.datasource.druid.master")
public DataSource masterDataSource(DruidProperties druidProperties) throws SQLException {
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
//解决多数据源方式下,sql监控不显示问题
dataSource.addFilters("stat");
return druidProperties.dataSource(dataSource);
}