15、Spring Boot使用Druid和监控配置【从零开始学Spring Boot】

来源:互联网 发布:flash播放器mac版 编辑:程序博客网 时间:2024/05/17 02:54

Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource

整体步骤:

(1)  Druid简单介绍,具体看官网;

(2)  在pom.xml配置druid依赖包;

(3)  配置application.properties加入数据库源类型等参数;

(4)  编写druid servlet和filter提供监控页面访问;

(5)  输入地址进行测试;

Druid是Java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能。

业界把 Druid 和 HikariCP 做对比后,虽说 HikariCP 的性能比 Druid 高,但是因为 Druid 包括很多维度的统计和分析功能,所以这也是大家都选择使用它的原因。

下面来说明如何在 SpringBoot 中配置使用Druid

 

(1)添加Maven依赖 (或jar包)

      <dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>druid</artifactId>

            <version>1.0.18</version>

</dependency>



 

(2)、配置数据源相关信息

 

数据库访问配置

主数据源,默认的

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/test

spring.datasource.username=root

spring.datasource.password=123456

 

下面为连接池的补充设置,应用到上面所有数据源中

初始化大小,最小,最大

spring.datasource.initialSize=5

spring.datasource.minIdle=5

spring.datasource.maxActive=20

配置获取连接等待超时的时间

spring.datasource.maxWait=60000

配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒

spring.datasource.timeBetweenEvictionRunsMillis=60000

配置一个连接在池中最小生存的时间,单位是毫秒

spring.datasource.minEvictableIdleTimeMillis=300000

spring.datasource.validationQuery=SELECT 1 FROMDUAL

spring.datasource.testWhileIdle=true

spring.datasource.testOnBorrow=false

spring.datasource.testOnReturn=false

打开PSCache,并且指定每个连接上PSCache的大小

spring.datasource.poolPreparedStatements=true

spring.datasource.maxPoolPreparedStatementPerConnectionSize=20

配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙

spring.datasource.filters=stat,wall,log4j

通过connectProperties属性来打开mergeSql功能;慢SQL记录

spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

合并多个DruidDataSource的监控数据

#spring.datasource.useGlobalDataSourceStat=true

需要注意的是:spring.datasource.type旧的spring boot版本是不能识别的。

这时候启动应用就可以看到看到打印信息就是使用我们配置的数据源了:

[main]com.alibaba.druid.pool.DruidDataSource  : {dataSource-1} inited

 

 

(3) 配置监控统计功能

 

配置Servlet

如下是在SpringBoot项目中基于注解的配置,如果是web.xml配置,按规则配置即可。

com.kfit.base.servlet.DruidStatViewServlet :

package com.kfit.base.servlet;

 

importjavax.servlet.annotation.WebInitParam;

import javax.servlet.annotation.WebServlet;

 

importcom.alibaba.druid.support.http.StatViewServlet;

 

/**

 *druid数据源状态监控.

 *@author Administrator

 *

 */

 

@WebServlet(urlPatterns="/druid/*",

                     initParams={

                                    @WebInitParam(name="allow",value="192.168.1.72,127.0.0.1"),// IP白名单 (没有配置或者为空,则允许所有访问)

                             @WebInitParam(name="deny",value="192.168.1.73"),// IP黑名单 (存在共同时,deny优先于allow)

                             @WebInitParam(name="loginUsername",value="admin"),//用户名

                             @WebInitParam(name="loginPassword",value="123456"),//密码

                             @WebInitParam(name="resetEnable",value="false")//禁用HTML页面上的“Reset All”功能

                     }

)

publicclass DruidStatViewServlet extendsStatViewServlet{

       privatestatic finallong serialVersionUID = 1L;

      

}

 

 

配置Filter

com.kfit.base.servlet.DruidStatFilter :

package com.kfit.base.servlet;

 

import javax.servlet.annotation.WebFilter;

importjavax.servlet.annotation.WebInitParam;

 

importcom.alibaba.druid.support.http.WebStatFilter;

 

/**

 *druid过滤器.

 *@author Administrator

 *

 */

@WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",

       initParams={

                            @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")//忽略资源

        }

)

publicclass DruidStatFilter extends WebStatFilter{

 

}

 

最后在App.java类上加上注解:@ServletComponentScan是的spring能够扫描到我们自己编写的servlet和filter。

注意不要忘记在 SpringBootSampleApplication.java 上添加@ServletComponentScan 注解,不然就是404了。

然后启动项目后访问 http://127.0.0.1:8080/druid/index.html 即可查看数据源及SQL统计等。 

 

(4)配置监控系统方式二:

以上配置的监控方式是使用了原生的servlet,filter方式,然后通过@ServletComponentScan进行启动扫描包的方式进行处理的,你会发现我们的servlet,filter根本没有任何的编码。

在这里我们将使用另外一种方式进行处理:使用代码注册

编写类:com.kfit.base.servlet.DruidConfiguration :

package com.kfit.base.servlet;

 

importorg.springframework.boot.context.embedded.FilterRegistrationBean;

importorg.springframework.boot.context.embedded.ServletRegistrationBean;

importorg.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

 

importcom.alibaba.druid.support.http.StatViewServlet;

importcom.alibaba.druid.support.http.WebStatFilter;

 

/**

 *druid 配置.

 *

 *这样的方式不需要添加注解:@ServletComponentScan

 *@author Administrator

 *

 */

@Configuration

publicclass DruidConfiguration {

      

       /**

        *注册一个StatViewServlet

        *@return

        */

       @Bean

       publicServletRegistrationBean DruidStatViewServle2(){

              //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.

              ServletRegistrationBeanservletRegistrationBean =newServletRegistrationBean(new StatViewServlet(),"/druid2/*");

             

              //添加初始化参数:initParams

             

              //白名单:

              servletRegistrationBean.addInitParameter("allow","127.0.0.1");

              //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.

              servletRegistrationBean.addInitParameter("deny","192.168.1.73");

              //登录查看信息的账号密码.

              servletRegistrationBean.addInitParameter("loginUsername","admin2");

              servletRegistrationBean.addInitParameter("loginPassword","123456");

              //是否能够重置数据.

              servletRegistrationBean.addInitParameter("resetEnable","false");

              returnservletRegistrationBean;

       }

      

       /**

        *注册一个:filterRegistrationBean

        *@return

        */

       @Bean

       publicFilterRegistrationBean druidStatFilter2(){

             

              FilterRegistrationBeanfilterRegistrationBean =newFilterRegistrationBean(new WebStatFilter());

             

              //添加过滤规则.

              filterRegistrationBean.addUrlPatterns("/*");

             

              //添加不需要忽略的格式信息.

              filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid2/*");

              returnfilterRegistrationBean;

       }

      

}

 

启动应用就可以访问:http://127.0.0.1:8080/druid2/index.html输入账号和密码:admin2/123456 就可以访问了。


Spring Boot 系列博客】

58. Spring Boot国际化(i18n)【从零开始学Spring Boot】 

 

57. Spring 自定义properties升级篇【从零开始学Spring Boot】 

 

56. spring boot中使用@Async实现异步调用【从零开始学Spring Boot】 

 

55. spring boot 服务配置和部署【从零开始学Spring Boot】 

 

54. spring boot日志升级篇—logback【从零开始学Spring Boot】

 

52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】 

 

51. spring boot属性文件之多环境配置【从零开始学Spring Boot】

 

50. Spring Boot日志升级篇—log4j【从零开始学Spring Boot】

 

49. spring boot日志升级篇—理论【从零开始学Spring Boot】

 

48. spring boot单元测试restfull API【从零开始学Spring Boot】

 

47. Spring Boot发送邮件【从零开始学Spring Boot】

 

46. Spring Boot中使用AOP统一处理Web请求日志

 

45. Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】

 

44. Spring Boot日志记录SLF4J【从零开始学Spring Boot】

 

43. Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】

 

42. Spring Boot多数据源【从零开始学Spring Boot】

 

41. Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】

 

40. springboot + devtools(热部署)【从零开始学Spring Boot】 

 

39.4 Spring Boot Shiro权限管理【从零开始学Spring Boot】

 

39.3 Spring Boot Shiro权限管理【从零开始学Spring Boot】

 

39.2. Spring Boot Shiro权限管理【从零开始学Spring Boot】

 

39.1 Spring Boot Shiro权限管理【从零开始学Spring Boot】

 

38 Spring Boot分布式Session状态保存Redis【从零开始学Spring Boot】 

 

37 Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】 

 

36 Spring Boot Cache理论篇【从零开始学Spring Boot】

 

35 Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】 

 

34Spring Boot的启动器Starter详解【从零开始学Spring Boot】

 

33 Spring Boot 监控和管理生产环境【从零开始学Spring Boot】

 

32 Spring Boot使用@SpringBootApplication注解【从零开始学Spring Boot】 

 

31 Spring Boot导入XML配置【从零开始学Spring Boot】

 

 

更多查看博客: http://412887952-qq-com.iteye.com/


0 0
原创粉丝点击