Druid可以做什么?
1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
2) 替换和。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
4) SQL执行日志,Druid提供了不同的LogFilter,能够支持、和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。
工程目录结构:
1、pom.xml
添加Druid依赖
4.0.0 com.zit SpringBoot 0.0.1-SNAPSHOT jar UTF-8 org.springframework.boot spring-boot-starter-parent 2.0.1.BUILD-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-thymeleaf com.alibaba druid 1.0.29 spring-snapshots Spring Snapshots https://repo.spring.io/libs-snapshot true
然后在项目名称上右键——maven——update project
即可加入依赖的jar包
2、配置文件application.properties:
加入管理数据源的Druid配置信息
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource#DB Configuration:spring.datasource.driverClassName = com.mysql.jdbc.Driverspring.datasource.url = jdbc:mysql://localhost:3306/test?characterEncoding=utf-8spring.datasource.username = rootspring.datasource.password = spring.datasource.filters=stat,wall,log4jspring.datasource.maxActive=20spring.datasource.initialSize=1spring.datasource.maxWait=60000# 打开PSCache,并且指定每个连接上PSCache的大小spring.datasource.poolPreparedStatements=truespring.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=truespring.datasource.testOnBorrow=falsespring.datasource.testOnReturn=false#JPA Configuration: spring.jpa.database=MySQLspring.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;@Configurationpublic class DruidConfiguration { @Bean public ServletRegistrationBean druidServlet() { ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(); servletRegistrationBean.setServlet(new StatViewServlet()); servletRegistrationBean.addUrlMappings("/druid/*"); MapinitParameters = new HashMap (); 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
输入配置的用户名和密码,即可看到