springboot配置druid监听
druid监听是在我们使用druid数据库连接池的基础上进行配置的。添加的核心依赖就是druid-spring-boot-starter
。本示例是在
springboot集成mybatis基础上实现的。
基本示例
- 添加依赖
<!--添加数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.16</version>
</dependency>
- 配置数据源和数据库连接池
# 配置数据源
spring:
datasource:
#数据库连接配置
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/springbootdata
username: root
password: root
#连接池配置
initial-size: 5 # 初始化大小
min-idle: 5 # 最小
max-active: 100 # 最大
max-wait: 60000 # 连接超时时间
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
min-evictable-idle-time-millis: 300000 # 指定一个空闲连接最少空闲多久后可被清除,单位是毫秒
validationQuery: selectversion()
test-while-idle: true # 当连接空闲时,是否执行连接测试
test-on-borrow: false # 当从连接池借用连接时,是否测试该连接
test-on-return: false # 在连接归还到连接池时是否测试该连接
filters: wall,stat,slf4j # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
maxOpenPreparedStatements: 20
connectionProperties: druid.stat.slowSqlMillis=200;druid.stat.logSlowSql=true
- 创建连接池的配置,里面创建了数据源
dataSource
,一个管理后台的Servlet以及一个web监控的filter
@Configuration
public class DataSourceConfig {
@Bean(name = "dataSource")
@ConfigurationProperties("spring.datasource")
@Primary
public DataSource masterDataSource() {
return DruidDataSourceBuilder.create().build();
}
/**
* 配置Druid的监控,一个管理后台的Servlet
* @return
*/
@Bean
public ServletRegistrationBean druidServlet() {
//指定拦截器只拦截druid管理页面的请求
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// IP白名单,如果没有设置或为空,则表示允许所有访问.(不能写成*,不然会报错)
servletRegistrationBean.addInitParameter("allow", "");
// IP黑名单(共同存在时,deny优先于allow)
servletRegistrationBean.addInitParameter("deny", "192.168.1.19");
//控制台管理的用户名和密码
servletRegistrationBean.addInitParameter("loginUsername", "admin");
servletRegistrationBean.addInitParameter("loginPassword", "admin");
//是否能够重置数据 禁用HTML页面上的“Reset All”功能
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean;
}
/**
* 配置一个web监控的filter
* @return
*/
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
- 启动项目,在浏览器输入
http://localhost:8088/moyundong/druid/login.html
就可以看到监控页面的登录页面了,用户名和密码就是我们在druidServlet
设置的admin和admin了,
这个用户名和密码可以自定义。
- 输入用户名和密码登录成功后可以看到如下页面
- 如果有执行的sql语句,SQL监控页面就能看到我们执行的sql语句。还可以看别的信息,大家运行起来看看。
所有的sql语句打印到一个日志文件
如果我们想把所有的sql文件保存到一个日志文件里面,我们可以在连接池的filters
里面加上slf4j
,然后再在logback
日志文件里面配置日志保存策略。示例如下(示例里面DruidFile
是连接池日志保存的策略。):
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址目录 -->
<property name="LOG_HOME" value="D:/log/springboot2-test07" />
<!-- 控制台输出的配置 -->
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
</encoder>
</appender>
<!-- 每天生成一个.log日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名,我们使用的是路径${LOG_HOME}+文件名(文件名里面加了日期) -->
<FileNamePattern>${LOG_HOME}/test07.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小,默认是10MB,超过这个就会备份为一个压缩文件 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<appender name="DruidFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名,我们使用的是路径${LOG_HOME}+文件名(文件名里面加了日期) -->
<FileNamePattern>${LOG_HOME}/druid_slow_sql.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小,默认是10MB,超过这个就会备份为一个压缩文件 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 根日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
<!--自定义日志级别配置,指定我们项目都是debug级别 -->
<logger name="com.moyundong" level="debug" />
<!--把所有数据库的执行语句都记录到DruidFile里面,DruidFile配置如上,这样就实现了所有的sql语句日志打印到一个文件 -->
<logger name="druid.sql.Statement" level="debug">
<appender-ref ref="DruidFile" />
</logger>
</configuration>
注意事项
- 如果登录进去看不到SQL监控页面看不到数据,那么就是filters配置失败了,一般是因为
application.yml
文件里面filters没有和username
、password
等在一个层级,可能前面多了一个druid:
filters
里面不要加config
,connectionProperties
里面不要加config.decrypt=true
不然查询的时候会报java.lang.IllegalArgumentException: Failed to decrypt
解密失败的错误filters
里面如果要加log4j
,那么就得引入
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</dependency>
- 因为springboot默认使用的是
logback
,所以filters
里面如果要加日志的话,就加slf4j
,而不是log4j
,这样就不用添加别的依赖。
本节示例下载地址:java相关demo下载列表
1介绍
2springboot定时任务
3springboot定时任务配置详解
4springboot动态定时任务
5springboot集成websocket
6springboot多数据源
7springboot配置druid监听
8springboot自定义注解
9springboot常见注解详解
10springboot接收参数详解
11springboot验证机制@Valid和@Validated
12springboot集成Swagger2
13springboot集成swagger-bootstrap-ui
14springboot集成shiro
15springboot集成shiro(二)
16springboot集成jwt
17springboot集成ActiveMQ
18springboot缓存机制
🍉🍉🍉 欢迎大家来博客了解更多内容:java乐园 🍉🍉🍉
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/13509.html