springboot项目配置Druid

一、druid介绍

1-1、Druid是什么?

Druid是阿里巴巴公司开源的一个Java语言的数据库连接池。
Druid能够提供强大的监控和扩展功能。

1-2、项目开源地址

https://github.com/alibaba/druid

1-3、官方文档

https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

1-4、Druid可以做什么?

可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
1、替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
2、数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。
3、DruidDataSource都支持PasswordCallback。
4、SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选 择相应的LogFilter,监控你应用的数据库访问情况。
5、扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。

二、Spring Boot与Druid的集成

2-1、pom依赖


<dependency>
  <groupId>mysqlgroupId>
  <artifactId>mysql-connector-javaartifactId>
  <version>5.1.13version>
dependency>

<dependency>
  <groupId>com.alibabagroupId>
  <artifactId>druidartifactId>
  <version>1.1.6version>
dependency>

<dependency>
  <groupId>log4jgroupId>
  <artifactId>log4jartifactId>
  <version>1.2.17version>
dependency>

2-2、application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

#连接池的配置信息
## 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
## 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小(防火墙这一块一定不能开,sqlite不支持,会导致奇怪的异常)
spring.datasource.poolPreparedStatements=false
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
spring.datasource.useGlobalDataSourceStat=true

DruidDataSource配置属性列表,可参考官网说明:
https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8

2-3、DruidSource配置信息的定制

package com.example.demo.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * Druid 配置信息
 */
@Configuration
public class DruidConfig {
     
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid(){
     
        return new DruidDataSource();
    }

    //配置Druid的监控
    //1、配置一个管理后台的Servlet
    @Bean
    public ServletRegistrationBean registrationBean() {
     
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet());    //添加初始化参数:initParams
        servletRegistrationBean.addUrlMappings("/druid/*");
        //白名单:
        servletRegistrationBean.addInitParameter("allow", "");
        //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
        servletRegistrationBean.addInitParameter("deny", "");
        //登录查看信息的账号密码.
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        servletRegistrationBean.addInitParameter("loginPassword", "admin");
        //是否能够重置数据.
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean;
    }

    //2、配置一个web监控的filter
    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
     
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        //添加过滤规则.
        filterRegistrationBean.addUrlPatterns("/*");
        //添加不需要忽略的格式信息.
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}

2-4、浏览器运行 http://localhost:8080/druid/index.html

账号/密码填写admin/admin(Druid配置信息中配置的),进入页面
springboot项目配置Druid_第1张图片

三、druid日志logback.xml配置(只记录sql和时间)-如不需要,请忽略此章节

3-1、修改application.properties

spring.datasource.filters=stat,wall,slf4j

**注意:**将log4j修改为slf4j,修改后pom.xml就不需要依赖log4j的jar包

3-2、新增logback-spring.xml

resources目录下新增logback-spring.xml,内容如下:



<configuration>
  
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%p %d{yyyy-MM-dd HH:mm:ss.SSS} [%t][%c.%M] - %m%npattern>
		encoder>
	appender>
	<appender name="druidFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			
			<FileNamePattern>\data\druid.log-%d{yyyy-MM-dd} FileNamePattern>
			
			<MaxHistory>30MaxHistory>
		rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			
			<pattern>
				%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
			pattern>
		encoder>
	appender>

  
	<logger name="druid" level="DEBUG">
		<appender-ref ref="console" />
		<appender-ref ref="druidFile" />
	logger>

	<root level="INFO">
		<appender-ref ref="console" />
	root>
configuration>

如果已有logback文件,则添加druid相关配置!

3-3、新增Slf4jLogFilter

DruidConfig中新增Slf4jLogFilter的bean配置,代码如下:

@Bean
public Slf4jLogFilter logFilter(){
     
    Slf4jLogFilter filter = new Slf4jLogFilter();
    filter.setResultSetLogEnabled(false);
    filter.setConnectionLogEnabled(false);
    filter.setStatementParameterClearLogEnable(false);
    filter.setStatementCreateAfterLogEnabled(false);
    filter.setStatementCloseAfterLogEnabled(false);
    filter.setStatementParameterSetLogEnabled(false);
    filter.setStatementPrepareAfterLogEnabled(false);
    return  filter;
}

3-4、DataSource增加日志过滤器

DruidConfig中druid配置中配置日志过滤器,代码如下:

@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid(){
     
    DruidDataSource  druidDataSource = new DruidDataSource();
    List list= new ArrayList(){
     {
     add(logFilter());}};
    druidDataSource.setProxyFilters(list);
    return druidDataSource;
}

3-5、效果如图:

springboot项目配置Druid_第2张图片

你可能感兴趣的:(Java,java,数据库,spring,boot)