springboot进阶学习(七)springboot配置druid监听

springboot配置druid监听

druid监听是在我们使用druid数据库连接池的基础上进行配置的。添加的核心依赖就是druid-spring-boot-starter。本示例是在
springboot集成mybatis基础上实现的。

基本示例

  1. 添加依赖
<!--添加数据库连接池 -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid-spring-boot-starter</artifactId>
  <version>1.1.16</version>
</dependency>
  1. 配置数据源和数据库连接池
# 配置数据源
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
  1. 创建连接池的配置,里面创建了数据源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;
    }
}
  1. 启动项目,在浏览器输入http://localhost:8088/moyundong/druid/login.html就可以看到监控页面的登录页面了,用户名和密码就是我们在druidServlet设置的admin和admin了,
    这个用户名和密码可以自定义。
  2. 输入用户名和密码登录成功后可以看到如下页面
  3. 如果有执行的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没有和usernamepassword等在一个层级,可能前面多了一个druid:
  • filters里面不要加configconnectionProperties里面不要加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乐园 🍉🍉🍉

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值