zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    OpenCV -- Mat 转 QImage 函数
    Qt--checkbox
    QT 发布release版本
    JS_0014:JS刷新页面
    JS_0013:JS获取文件后缀名
    JS_0012:JS从一个有规则的字符串中随机选择一个字符再循环生成一个新的无规则的字符串
    JQuery0016:JQuery等待页面全部加载完后执行代码块
    JQuery0015:JQuery查找指定元素并修改其属性
    JS_0011:通过JS给div添加html标签内容
    JS_0010:获取url中指定的参数
  • 原文地址:https://www.cnblogs.com/datangguott/p/13933888.html
Copyright © 2011-2022 走看看