zoukankan      html  css  js  c++  java
  • Spring Boot + Druid 监控数据库(三)

    Druid可以做什么? 

    1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。 

    2) 替换DBCPC3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。 

    3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。 

    4) SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-LoggingLog4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。 

    扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。

    工程目录结构:

     

    1、pom.xml

    添加Druid依赖

    <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.zit</groupId>
      <artifactId>SpringBoot</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.BUILD-SNAPSHOT</version>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <!-- Spring data jpa -->
        <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jpa</artifactId>
         </dependency>
         
         <!-- thymeleaf模板 -->
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        
        <!-- druid -->
         <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>    
    </dependencies>
    
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/libs-snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    
    </project>

    然后在项目名称上右键——maven——update project

    即可加入依赖的jar包

    2、配置文件application.properties:

    加入管理数据源的Druid配置信息

    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    #DB Configuration:
    spring.datasource.driverClassName = com.mysql.jdbc.Driver
    spring.datasource.url = jdbc:mysql://localhost:3306/test?characterEncoding=utf-8
    spring.datasource.username = root
    spring.datasource.password = 
    
    spring.datasource.filters=stat,wall,log4j
    spring.datasource.maxActive=20
    spring.datasource.initialSize=1
    spring.datasource.maxWait=60000
    # 打开PSCache,并且指定每个连接上PSCache的大小
    spring.datasource.poolPreparedStatements=true
    spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    spring.datasource.timeBetweenEvictionRunsMillis=60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    spring.datasource.minEvictableIdleTimeMillis=300000
    # 校验SQL,Oracle配置 spring.datasource.validationQuery=SELECT 1 FROM DUAL,如果不配validationQuery项,则下面三项配置无用
    spring.datasource.validationQuery=SELECT 'x'
    spring.datasource.testWhileIdle=true
    spring.datasource.testOnBorrow=false
    spring.datasource.testOnReturn=false
    
    
    #JPA Configuration:  
    spring.jpa.database=MySQL
    spring.jpa.show-sql=true  
    spring.jpa.generate-ddl=true  
    spring.jpa.hibernate.ddl-auto=update  
    spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy  
    
    #关闭thymeleaf缓存
    spring.thymeleaf.cache=false

    3、添加监控信息类

    和控制器类Controller在同一目录下

    package com.zit;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletRegistration;
    
    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 com.alibaba.druid.support.http.StatViewServlet;
    import com.alibaba.druid.support.http.WebStatFilter;
    
    
    @Configuration
    public class DruidConfiguration {
    
        @Bean
        public ServletRegistrationBean druidServlet() {
            ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
            servletRegistrationBean.setServlet(new StatViewServlet());
            servletRegistrationBean.addUrlMappings("/druid/*");    
            Map<String,String> initParameters = new HashMap<String, String>();
            initParameters.put("loginUsername","admin");// 用户名
            initParameters.put("loginPassword","admin");// 密码
            initParameters.put("resetEnable","false");// 禁用HTML页面上的“Reset All”功能
            initParameters.put("allow",""); // IP白名单 (没有配置或者为空,则允许所有访问)
    //        initParameters.put("deny", "192.168.0.19");// IP黑名单
            //(存在共同时,deny优先于allow)
            servletRegistrationBean.setInitParameters(initParameters);
            return servletRegistrationBean;
        }
        
        @Bean
        public FilterRegistrationBean statFilter() {
            FilterRegistrationBean filterRegistrationBean  = new FilterRegistrationBean();
            filterRegistrationBean.setFilter(new WebStatFilter());
            filterRegistrationBean .addUrlPatterns("/*");
            filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
            return filterRegistrationBean ;
        }
        
    }

     启动项目,输入网址:http://localhost:8080/druid/login.html

    输入配置的用户名和密码,即可看到

  • 相关阅读:
    项目无法运行iPhone5模拟器
    多线程下载图片,滑动tableView崩溃--资源抢夺问题
    提醒事项 1. 冥想TX 2.下班路上听歌激励自己 3. 不戴眼镜 4. 困难任务拆解
    AutoLayout性能不如frame
    Tunnelblick 覆盖安装失败
    weakSelf 和 strongSelf
    动画
    4/16 近期状态
    知乎live 我的读书经验 总结
    C语言-第23课
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/8589785.html
Copyright © 2011-2022 走看看