博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot 中使用Druid 数据源提供数据库监控
阅读量:7177 次
发布时间:2019-06-29

本文共 11574 字,大约阅读时间需要 38 分钟。

一、springboot 中注册 Servlet/Filter/Listener 的方式有两种,1 通过代码注册 ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 。

2 通过注解的方式,在 SpringBootApplication 上使用@ServletComponentScan 注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码。

 

二、配置springboot 项目使用Druid 数据源,好处就不多说了,百度一下很多。配置步骤,本机使用maven配置

2.1 引入依赖,完整的pom文件如下

4.0.0
com.huitong
demo1
jar
1.0-SNAPSHOT
demo1 Maven Webapp
http://maven.apache.org
org.springframework.boot
spring-boot-starter-parent
2.0.0.RELEASE
1.8
1.3.2
2.8.0
1.7.2
1.1.9
com.alibaba
druid
${druid.version}
io.springfox
springfox-swagger2
${springfox-swagger.version}
io.springfox
springfox-swagger-ui
${springfox-swagger.version}
com.github.xiaoymin
swagger-bootstrap-ui
${swagger-bootstrap-ui.version}
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
mysql
mysql-connector-java
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybatis.spring.boot.version}
org.springframework.boot
spring-boot-starter-data-redis
org.springframework.boot
spring-boot-starter-mail
com.jayway.jsonpath
json-path
org.projectlombok
lombok
org.apache.commons
commons-lang3
org.apache.httpcomponents
httpclient
org.springframework.boot
spring-boot-devtools
true
demo1
src/main/resources
**/*.xml
**/*.properties
src/main/java
**/*.xml
**/*.properties
org.springframework.boot
spring-boot-maven-plugin
true
org.apache.maven.plugins
maven-compiler-plugin
${java.version}
${java.version}
${java.version}
${java.version}
View Code

需要引入:mysql-connector-java,druid,

 

2.2 配置数据源 application.properties

#数据库配置# 驱动配置信息spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.url=jdbc:mysql://localhost:3306/demo1?useUnicode=true&characterEncoding=UTF-8&useSSL=false&zeroDateTimeBehavior=convertToNullspring.datasource.username=rootspring.datasource.password=testspring.datasource.driver-class-name=com.mysql.jdbc.Driver# 连接池的配置信息# 初始化大小,最小,最大spring.datasource.initialSize=3spring.datasource.minIdle=5spring.datasource.maxActive=20# 配置获取连接等待超时的时间spring.datasource.maxWait=30000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒spring.datasource.timeBetweenEvictionRunsMillis=60000# 配置一个连接在池中最小生存的时间,单位是毫秒spring.datasource.minEvictableIdleTimeMillis=300000spring.datasource.validationQuery=SELECT 1 FROM DUALspring.datasource.testWhileIdle=truespring.datasource.testOnBorrow=falsespring.datasource.testOnReturn=false# 打开PSCache,并且指定每个连接上PSCache的大小spring.datasource.poolPreparedStatements=truespring.datasource.maxPoolPreparedStatementPerConnectionSize=20# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙spring.datasource.filters=stat,wall# 通过connectProperties属性来打开mergeSql功能;慢SQL记录spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=10000#mybatis 配置#扫描映射文件mybatis.mapper-locations=classpath*:com/huitong/**/mapper/*.xml

 

 

 

2.3 配置 web 监控,使用注解的方式注册 监控显示Servlet 和 采集web-jdbc关联监控的数据的Filter,

2.3.1 数据源配置

import com.alibaba.druid.pool.DruidDataSource;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import javax.sql.DataSource;import java.sql.SQLException;@Configurationpublic class DruidDBConfig {    private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class);    @Value("${spring.datasource.url}")    private String dbUrl;    @Value("${spring.datasource.username}")    private String username;    @Value("${spring.datasource.password}")    private String password;    @Value("${spring.datasource.driver-class-name}")    private String driverClassName;    @Value("${spring.datasource.initialSize}")    private int initialSize;    @Value("${spring.datasource.minIdle}")    private int minIdle;    @Value("${spring.datasource.maxActive}")    private int maxActive;    @Value("${spring.datasource.maxWait}")    private int maxWait;    @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")    private int timeBetweenEvictionRunsMillis;    @Value("${spring.datasource.minEvictableIdleTimeMillis}")    private int minEvictableIdleTimeMillis;    @Value("${spring.datasource.validationQuery}")    private String validationQuery;    @Value("${spring.datasource.testWhileIdle}")    private boolean testWhileIdle;    @Value("${spring.datasource.testOnBorrow}")    private boolean testOnBorrow;    @Value("${spring.datasource.testOnReturn}")    private boolean testOnReturn;    @Value("${spring.datasource.poolPreparedStatements}")    private boolean poolPreparedStatements;    @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")    private int maxPoolPreparedStatementPerConnectionSize;    @Value("${spring.datasource.filters}")    private String filters;    @Value("{spring.datasource.connectionProperties}")    private String connectionProperties;    /**     * @Bean 声明,DataSource 对象为 Spring 容器所管理;     * @Primary 表示这里定义的DataSource将覆盖其他来源的DataSource。     * StatFilter,用于统计监控信息。StatFilter的别名是stat。     * 统计SQL信息,合并统计。mergeStat是的MergeStatFilter缩写。     *     通过 DataSource 的属性
或者 * connectProperties属性来打开mergeSql功能
* StatFilter属性slowSqlMillis用来配置SQL慢的标准 * * @return */ @Bean @Primary public DataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(dbUrl); datasource.setDriverClassName(driverClassName); datasource.setUsername(username); datasource.setPassword(password); //configuration datasource.setInitialSize(initialSize); datasource.setMinIdle(minIdle); datasource.setMaxActive(maxActive); datasource.setMaxWait(maxWait); datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); datasource.setValidationQuery(validationQuery); datasource.setTestWhileIdle(testWhileIdle); datasource.setTestOnBorrow(testOnBorrow); datasource.setTestOnReturn(testOnReturn); datasource.setPoolPreparedStatements(poolPreparedStatements); datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize); try { /** * 设置StatFilter,用于统计监控信息。 * StatFilter的别名是stat * */ datasource.setFilters(filters); } catch (SQLException e) { logger.error("druid configuration initialization filter : {0}",e); } datasource.setConnectionProperties(connectionProperties); return datasource; }}

 

2.3.2 通过注解的方式配置监控显示页面 Servlet

import com.alibaba.druid.support.http.StatViewServlet;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;/** * StatViewServlet用于展示Druid的统计信息。 * 提供监控信息展示的html页面 * 提供监控信息的JSON API * * 内置监控页面的首页是/druid/index.html * *//** * @Webservlet * 有两个属性可以用来表示Servlet的访问路径,分别是value和urlPatterns。value和urlPatterns都是数组形式, * 表示我们可以把一个Servlet映射到多个访问路径,但是value和urlPatterns不能同时使用。 * */@WebServlet(        urlPatterns = {
"/druid/*"}, initParams = { @WebInitParam(name = "loginUsername", value = "admin"), @WebInitParam(name = "loginPassword", value = "test"), @WebInitParam(name = "resetEnable", value = "false")// @WebInitParam(name = "allow", value = "127.0.0.1") })public class DruidStatViewServlet extends StatViewServlet {}

 

2.3.3 通过注解的方式配置采集Filter

import com.alibaba.druid.support.http.WebStatFilter;import javax.servlet.annotation.WebFilter;import javax.servlet.annotation.WebInitParam;/** * WebStatFilter用于采集web-jdbc关联监控的数据。 * 属性filterName声明过滤器的名称,可选 * 属性urlPatterns指定要过滤 的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性) */@WebFilter(        urlPatterns = "/demo1/*",        initParams = {                @WebInitParam(name = "exclusions",value = "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*")        })public class DruidStatFilter extends WebStatFilter {}

 

2.4 使应用开启扫描注册功能

//    开启组件扫描和自动配置//    mapper 扫描 mapper 接口@SpringBootApplication@MapperScan(basePackages = {
"com.huitong.**.mapper"})@ServletComponentScan(basePackages = {
"com.huitong.**.config"})public class Demo1Application { public static void main(String[] args) { SpringApplication.run(Demo1Application.class, args);//负责启动引导应用程序 }}

 

2.5 此时配置完成,如果应用搞完就可以测试了。启动应用后在浏览器中输入 http://localhost:8080/druid/index.html

通过登录即可看到监控信息

 

转载地址:http://cfszm.baihongyu.com/

你可能感兴趣的文章
Android模拟器入门
查看>>
ZOJ_1094/hdoj_1082_Matrix Chain Multiplication_...
查看>>
1040_As easy as A+B
查看>>
java8如何反射得到方法参数变量的名字
查看>>
Spring Data Redis 让 NoSQL 快如闪电 (1)
查看>>
git库detached heads问题处理
查看>>
String操作性能提升一
查看>>
服务器DNS选择的问题
查看>>
Centos Mysql 编译安装调试
查看>>
Midamble Allocation by layer 1
查看>>
孤荷凌寒自学python那些事第一天
查看>>
File server文件夹权限变更记录
查看>>
T-sql语句中GO的作用及语法
查看>>
我的友情链接
查看>>
【大数据-第二期】java基础第四天作业
查看>>
我的友情链接
查看>>
Fedora 18 -- Guides PDF
查看>>
Django+Nginx+Uwsgi架构部署,新建个app添加web(二)
查看>>
MySQL按月/按周统计查询
查看>>
JavaScript之css操作总结
查看>>