SpringBoot数据库连接池Druid的配置及log4j:WARN的解决

简介: SpringBoot数据库连接池Druid的配置及log4j:WARN的解决

前言

数据库连接池负责分配、管理和释放数据库连接,它允许程序重复使用一个现有的连接,而不是再重新建立一个。释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。常见的数据库连接池有c3p0,druid,hikari,DBCP等。Hikari是一款非常强大,高效,并且号称“史上最快连接池”。并且在springboot2.0之后,采用的默认数据库连接池就是Hikari。Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 数据库连接池的优点,同时加入了日志监控。

一、导入相关依赖

1、在导入相关依赖之前,可以通过在SpringBootDataApplicationTests里配置来查看SpringBoot默认的数据库连接池。会发现默认数据源是:class com.zaxxer.hikari.HikariDataSource

package com.study;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@SpringBootTest
class SpringBootDataApplicationTests {
  @Autowired
  DataSource dataSource;
  @Test
  void contextLoads() throws SQLException {
    //查看默认的数据源:class com.zaxxer.hikari.HikariDataSource
    System.out.println(dataSource.getClass());
    //获得数据库连接
    Connection connection = dataSource.getConnection();
    System.out.println(connection);
    //关闭
    connection.close();
  }
}

cea8077c813af34ddf68e136d5eb9fd2_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5YWo5p2R56ys5LqM5biF,size_20,color_FFFFFF,t_70,g_se,x_16.png

2、导入Druid和log4j依赖

<!-- druid,天然集成监控功能,可以监控数据库访问性能-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.8</version>
    </dependency>
    <!--log4j-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

二、在配置文件中对Druid数据源进行配置

注:上面的数据库连接根据实际情况进行配置,博主用的是之前项目的mybatis数据库,Druid专有配置可以直接复制,一般不会有太大的变动。

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    #Spring Boot 默认是不注入这些属性值的,需要自己绑定
    #druid 数据源专有配置
    # 初始连接数
    initialSize: 5
    # 最小连接池数量和最大连接池数量
    minIdle: 5
    maxActive: 20
    # 配置获取连接等待超时的时间,单位为毫秒
    maxWait: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接
    timeBetweenEvictionRunsMillis: 60000
    # 配置一个连接在池中最小生存的时间
    minEvictableIdleTimeMillis: 300000
    # 配置检测连接是否有效
    validationQuery: SELECT 1 FROM DUAL
    #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
    testWhileIdle: true
    #配置从连接池获取连接时,是否检查连接有效性,true每次都检查;false不检查。做了这个配置会降低性能。
    testOnBorrow: false
    #配置向连接池归还连接时,是否检查连接有效性,true每次都检查;false不检查。做了这个配置会降低性能。
    testOnReturn: false
    #打开PsCache
    poolPreparedStatements: true
    #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

三、自定义Druid数据源配置

1、为 DruidDataSource 绑定全局配置文件中的参数,再添加到容器中

@Configuration
public class DruidConfig {
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }

2、配置Druid数据源监控


注:loginUsername和loginPassword是固定的,并且因为SpringBoot内置Servlet容器,所以没有web.xml,要想用使用 Servlet 功能,就必须要借用 Spring Boot 提供的 ServletRegistrationBean 接口。@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。

    //后台监控功能
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        //Druid后台账号密码配置
        HashMap<String, String> initParameters = new HashMap<>();
        initParameters.put("loginUsername", "admin");
        initParameters.put("loginPassword", "123456");
        //允许谁可以访问,这里允许所有用户
        initParameters.put("allow", "");
        //禁止谁能访问 initParameters.put("deny","192.168.1.1");
        bean.setInitParameters(initParameters);//设置初始化参数
        return bean;
    }
    //配置一个web监控的filter
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());
        HashMap<String, String> initParameters = new HashMap<>();
        bean.setInitParameters(initParameters);
        //这些东西不进行统计
        initParameters.put("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return bean;
    }

可以查看StatViewServlet源码,发现Druid后台的地址为本地地址+/druid/index.html

查看WebStatFilter源码,可以看见web监控的filter过滤器的相关配置其中就包括exclusions

查看源码,可以看见InitParameters的参数类型为Map,这就是为什么进行Druid后台账号密码配置时,要创建一个Map集合了。

四、进行监控

1、先写好一些SQl语句,将数据库的数据用Json传递给前端

2、进入Druid的登录界面,输入http://localhost:8080/druid/login.html

3、查看监控情况

五、遇到的问题

发现执行时报下列错误:


log4j:WARN No appenders could be found for logger (druid.sql.Connection).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN Seehttp://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.


解决:导入log4j文件后,并没有配置log4j属性文件

bdf33887b268c8279fcc103c03222fd1_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5YWo5p2R56ys5LqM5biF,size_20,color_FFFFFF,t_70,g_se,x_16.png


配置log4j属性文件,应用于控制台即可,博主以前也发过log4j属性配置文件,可以直接拿来用

#应用于控制台
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

结果:数据库连接池从初始化,开启,数据库操作直到关闭都能看得到

目录
打赏
0
0
0
0
10
分享
相关文章
SpringBoot入门 - 添加内存数据库H2
SpringBoot入门 - 添加内存数据库H2
166 3
SpringBoot入门 - 添加内存数据库H2
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
基于SpringBoot+Vue的班级综合测评管理系统设计与实现(系统源码+文档+数据库+部署等)
✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
93 2
基于SpringBoot+Vue实现的冬奥会科普平台设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
使用 Spring Boot 执行数据库操作:全面指南
使用 Spring Boot 执行数据库操作:全面指南
415 1
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
298 1
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等