springboot集成druid

springboot集成druid

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.3.5.RELEASE</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.dtg</groupId>
   <artifactId>springdruid</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>springdruid</name>
   <description>Demo project for Spring Boot</description>

   <properties>
       <java.version>1.8</java.version>
   </properties>

   <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jpa</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-jdbc</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>

       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <scope>runtime</scope>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
           <exclusions>
               <exclusion>
                   <groupId>org.junit.vintage</groupId>
                   <artifactId>junit-vintage-engine</artifactId>
               </exclusion>
           </exclusions>
       </dependency>

       <!-- druid 依赖-->
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid-spring-boot-starter</artifactId>
           <version>1.1.21</version>
       </dependency>

       <!-- druid监控 依赖-->
       <dependency>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
           <version>1.2.17</version>
       </dependency>

   </dependencies>

   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
       </plugins>
   </build>

</project>

application.yml配置

spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&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
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
 # 打开PSCache
poolPreparedStatements: true
 #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
 #如果运行时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority
 #则导入 log4j 依赖即可,Maven 地址: https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j,config
 #指定每个连接上PSCache的大小
maxPoolPreparedStatementPerConnectionSize: 20
 #合并多个DruidDataSource的监控数据
useGlobalDataSourceStat: true
 #通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

server:
port: 8080

新增DruidConfig配置类

使druid 数据源专有配置生效

package com.dtg.springdruid.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;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class DruidConfig {

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

   //因为Springboot内置了servlet容器,所以没有web.xml,替代方法就是将ServletRegistrationBean注册进去
   //加入后台监控
   @Bean  //这里其实就相当于servlet的web.xml
   public ServletRegistrationBean statViewServlet() {
       ServletRegistrationBean <StatViewServlet> bean =
               new ServletRegistrationBean <StatViewServlet>(new StatViewServlet(), "/druid/*");

       //后台需要有人登录,进行配置
       //bean.addUrlMappings(); 这个可以添加映射,我们在构造里已经写了
       //设置一些初始化参数
       Map <String, String> initParas = new HashMap <String, String>();
       initParas.put("loginUsername", "admin");//它这个账户密码是固定的
       initParas.put("loginPassword", "123456");
       //允许谁能防伪
       initParas.put("allow", "");//这个值为空或没有就允许所有人访问,ip白名单
       //initParas.put("allow","localhost");//只允许本机访问,多个ip用逗号,隔开
       //initParas.put("deny","");//ip黑名单,拒绝谁访问 deny和allow同时存在优先deny
       initParas.put("resetEnable", "false");//禁用HTML页面的Reset按钮
       bean.setInitParameters(initParas);
       return bean;
  }

   //再配置一个过滤器,Servlet按上面的方式注册Filter也只能这样
   @Bean
   public FilterRegistrationBean webStatFilter() {
       FilterRegistrationBean bean = new FilterRegistrationBean();
       //可以设置也可以获取,设置一个阿里巴巴的过滤器
       bean.setFilter(new WebStatFilter());
       bean.addUrlPatterns("/*");
       //可以过滤和排除哪些东西
       Map <String, String> initParams = new HashMap <String, String>();
       //把不需要监控的过滤掉,这些不进行统计
       initParams.put("exclusions", "*.js,*.css,/druid/*");
       bean.setInitParameters(initParams);
       return bean;
  }
}

编写测试类

package com.dtg.springdruid;

import com.alibaba.druid.pool.DruidDataSource;
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 SpringdruidApplicationTests {

   @Autowired
   DataSource dataSource;


   @Test
   void contextLoads() {

       System.out.println(dataSource.getClass());
       Connection connection = null;
       try {
           connection = dataSource.getConnection();
      } catch (SQLException e) {
           e.printStackTrace();
      }
       System.out.println(connection);

       DruidDataSource druidDataSource = (DruidDataSource)dataSource;
       System.out.println(druidDataSource.getMaxActive());
       System.out.println(druidDataSource.getInitialSize());
       try {
           connection.close();
      } catch (SQLException e) {
           e.printStackTrace();
      }
  }

}

测试结果

class com.alibaba.druid.pool.DruidDataSource com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@44faa4f2 20 5

原文地址:https://www.cnblogs.com/datangguott/p/13933888.html