Springboot配置druid连接池、监控和慢sql记录

Springboot项目使用druid连接池的配置方式

1. 导入依赖

推荐使用springboot标识的依赖

<dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>druid-spring-boot-starter</artifactId>

    <version>1.1.10</version>

</dependency>

eg:常用网址:https://mvnrepository.com/

2. 简单druid配置

yml配置后即可使用:

spring:
  datasource:
    # jdbc配置
    url:
    username:
    password:
    driver-class-name:
    type: com.alibaba.druid.pool.DruidDataSource

3. druid高级设置

yml配置:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url:
    username:
    password:
    driver-class-name:
    # 下面的连接池属性不会自动装配,使用下面的属性需要在配置类中配置数据源
    initialSize: 50 #初始化时建立连接的个数
    minIdle: 50 #最小连接池数量
    maxActive: 200 #最大连接池数量
    maxWait: 60000 #获取连接的最大等待时间,毫秒
    timeBetweenEvictionRunsMillis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,毫秒
    minEvictableIdleTimeMillis: 300000 #配置一个连接在池中最小生存的时间,毫秒
    maxEvictableIdleTimeMillis: 900000 #配置一个连接在池中最大生存的时间,毫秒
    validationQuery: SELECT 1 FROM DUAL #用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果          validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
    testWhileIdle: true #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
    testOnBorrow: false #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
    testOnReturn: false #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
    poolPreparedStatements: true #是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。

配置类代码:

@Configuration
public class DBConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return DruidDataSourceBuilder.create().build();
    }
}

3.sql监控配置

配置类中增加配置:

@Bean
public ServletRegistrationBean druidServlet() {
    ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
    //登录druid后台监控的账号密码
    servletRegistrationBean.addInitParameter("loginUsername", "root");
    servletRegistrationBean.addInitParameter("loginPassword", "root");
    //是否能够重置数据
    servletRegistrationBean.addInitParameter("resetEnable", "true");
    return servletRegistrationBean;
}
@Bean
@ConditionalOnMissingBean
public FilterRegistrationBean filterRegistrationBean() {
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
    filterRegistrationBean.setFilter(new WebStatFilter());
    //拦截的路径
    filterRegistrationBean.addUrlPatterns("/*");
    //不需要拦截的信息
    filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
    return filterRegistrationBean;
}

通过:项目地址/druid来进行访问,用户名密码为配置类中配置的密码,例如上面的root/root

4.慢sql日志记录

在配置类中增加配置:

public Filter statFilter(){
    StatFilter statFilter=new StatFilter();
    statFilter.setSlowSqlMillis(1000);// 执行超过此时间的为慢sql,毫秒
    statFilter.setLogSlowSql(true);// 是否打印慢日志
    statFilter.setMergeSql(true);// 是否将日志合并起来
    return statFilter;
}

数据源配置中修改为:

@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
    DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
    druidDataSource.setProxyFilters(Lists.newArrayList(statFilter()));
    return druidDataSource;
}

注:

1)springboot不同版本间yml配置文件中属性名会有所不同,理解->发挥

2)minEvictableIdleTimeMillismaxEvictableIdleTimeMillis赋值时的bug,

官方文档:

https://github.com/alibaba/druid/issues/1796

https://github.com/lihengming/druid/commit/ca13e8ff5a78c83f953fa8fb320c56be223219e1

3)关于druid的sql监控和慢sql记录,本文的自测可用,也在网上好了很多,网上很多总结的是在配置文件中配置,如下:

statViewServlet:
  enabled: true
  url-pattern: /monitor/druid/*
filter:
  stat:
    # 慢SQL记录
    log-slow-sql: true
    slow-sql-millis: 1000
    merge-sql: true
  wall:
    config:
    multi-statement-allow: true

4)官方学习地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

发布了73 篇原创文章 · 获赞 44 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_34928194/article/details/103629218