数据源druid提供的监控器,在springboot中的配置方法。配置好后的访问地址:
localhost:xxxx/druid/
pom.xml
<!-- druid第三发数据源,除tomcat jdbc、dbcp、-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
application.yml
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/mytest
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
druid算是第三方数据源,在spring boot中并没有自动配置类,需要自己配置下数据。
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid() {
return new DruidDataSource();
}
druid提供了servlet 和过滤器(可能表达不准确)。我们只需要把他加入到容器中并配置一些对应的参数:
(1)配置监控器的servlet:
/**
* 配置druid的过滤器
* 配置一个管理后台的servlet
*
* druid 为我们提供的servlet是 StatViewServlet
*/
@Bean
public ServletRegistrationBean statViewServlet() {
//传入我们druid提供的servlet 和访问的地址
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
Map<String, String> beanMap = new HashMap<>();
beanMap.put("loginUsername", "admin");//登录名
beanMap.put("loginPassword", "123456");//登录密码
beanMap.put("allow", "");//允许谁登录,默认或者空 是允许所有的登录
//还有很多参数有时间研究
bean.setInitParameters(beanMap);
return bean;
}
(2)配置监控器Servlet的Filter:
/**
* 配置一个web监控的过滤器
* 主要作用是过滤 请求和返回值,。
* 在Servlet规范2.3中定义了过滤器,它能够对Servlet容器的请求和响应对象进行检查和修改。
*
* 过滤器本身并不生成请求和响应对象,只是提供过滤功能。
*
* 过滤器能够在Servlet被调用之前检查Request对象,并修改Request Header和Request内容;
*
* 在Servlet被调用之后检查Response对象,修改Response Header和Response的内容。
*
* 过滤器可以过滤的Web组件包括Servlet,JSP和HTML等文件。
*
* Filter类似于IO中的过滤流,实现也类似于Servlet。
*/
@Bean
public FilterRegistrationBean webStatFilter() {
FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>(new WebStatFilter());
Map<String, String> beanMap = new HashMap<>();
//排除不过滤请求的url
beanMap.put("exclusions", "*.js,*.css,/druid/*");
registrationBean.setInitParameters(beanMap);
//拦截过滤所有的请求
registrationBean.setUrlPatterns(Arrays.asList("/*"));
return registrationBean;
}