千家信息网

springBoot(12):集成Druid

发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,一、添加依赖 org.mybatis.spring.boot mybatis-spring-boot-starter 1.2.0 mysql my
千家信息网最后更新 2025年02月16日springBoot(12):集成Druid

一、添加依赖

   org.mybatis.spring.boot   mybatis-spring-boot-starter   1.2.0   mysql   mysql-connector-java   runtime   com.alibaba   druid   1.0.26

二、配置application.properties

##################################mysql数据源配置##################################spring.datasource.url=jdbc:mysql://localhost/db_test?useUnicode=true&characterEncoding=utf-8spring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.jdbc.Driver#druid连接池spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

注意:其实到这里就可以正常使用了,但是如果想使用druid里的诸多属性,则需要添加支持类

三、添加druid的支持类

package com.example.demo.utils.configuration.druid;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.jdbc.DatabaseDriver;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.alibaba.druid.pool.DruidDataSource;/** * druid的支持类 * @Author: 我爱大金子 * @Description: druid的支持类 * @Date: Created in 12:48 2017/6/20 */@Configurationpublic class DruidConfiguration {    @ConditionalOnClass(DruidDataSource.class)    @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.alibaba.druid.pool.DruidDataSource", matchIfMissing = true)    static class Druid extends DruidConfiguration {        @Bean        @ConfigurationProperties("spring.datasource.druid")        public DruidDataSource dataSource(DataSourceProperties properties) {            DruidDataSource druidDataSource = (DruidDataSource)                    properties.initializeDataSourceBuilder().type(DruidDataSource.class).build();            DatabaseDriver databaseDriver =                    DatabaseDriver.fromJdbcUrl(properties.determineUrl());            String validationQuery = databaseDriver.getValidationQuery();            if (validationQuery != null) {                druidDataSource.setValidationQuery(validationQuery);            }            return druidDataSource;        }    }}

配置application.properties:

##################################mysql数据源配置##################################spring.datasource.url=jdbc:mysql://localhost/db_test?useUnicode=true&characterEncoding=utf-8spring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.type=com.alibaba.druid.pool.DruidDataSource#初始化连接大小spring.datasource.druid.initial-size=8#最小空闲连接数spring.datasource.druid.min-idle=5#最大连接数spring.datasource.druid.max-active=10#查询超时时间spring.datasource.druid.query-timeout=6000#事务查询超时时间spring.datasource.druid.transaction-query-timeout=6000#关闭空闲连接超时时间spring.datasource.druid.remove-abandoned-timeout=1800

四、监控

4.1、配置servlet

package com.example.demo.utils.configuration.druid;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;import com.alibaba.druid.support.http.StatViewServlet;/** * 监控-配置servlet * @Author: 我爱大金子 * @Description: 监控-servlet * @Date: Created in 12:50 2017/6/20 */@WebServlet(urlPatterns = { "/druid/*" }, initParams =        { @WebInitParam(name = "loginUsername", value = "liuy"),          @WebInitParam(name = "loginPassword", value = "123456") })public class DruidStatViewServlet extends StatViewServlet {    private static final long serialVersionUID = 1L;}

4.2、配置filter

package com.example.demo.utils.configuration.druid;import javax.servlet.annotation.WebFilter;import javax.servlet.annotation.WebInitParam;import com.alibaba.druid.support.http.WebStatFilter;/** * 监控-配置filter * @Author: 我爱大金子 * @Description: 描述 * @Date: Created in 12:51 2017/6/20 */@WebFilter(filterName = "druidWebStatFilter", urlPatterns = "/*", initParams = { @WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*") })public class DruidWebStatFilter extends WebStatFilter {}


测试:访问http://localhost:9090/druid/index.html


注意:此时还没有SQL监控与spring监控。


4.3、配置sql监控与spring监控

在application.properties文件中配置sql监控

#sql监控配置:filter类名:stat,config,encoding,loggingspring.datasource.druid.filters=stat


spring监控配置

第一步:新建一个配置文件,如:druid-bean.xml

                                       com.example.demo.mapper.*                              

第二步:在启动类上加载druid-bean.xml文件

package com.example.demo;import com.example.demo.utils.filter.CustomFilter;import com.example.demo.utils.listener.CustomListener;import com.example.demo.utils.servlet.CustomServlet;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.*;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ImportResource;import javax.servlet.DispatcherType;import javax.servlet.ServletContext;import javax.servlet.ServletException;import java.util.EnumSet;@ServletComponentScan@SpringBootApplication@ImportResource(locations = { "classpath:druid-bean.xml" })public class SpringbootDemo27Application {   public static void main(String[] args) {      SpringApplication.run(SpringbootDemo27Application.class, args);   }}

重启服务,报异常:

解决:添加aop依赖

   org.springframework.boot   spring-boot-starter-aop

重启服务






另一种实现方式

package com.liuy.demo.configuration;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.jdbc.DatabaseDriver;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.pool.DruidDataSource;import com.alibaba.druid.support.http.StatViewServlet;import com.alibaba.druid.support.http.WebStatFilter;@Configurationpublic class DruidConfiguration {                @ConditionalOnClass(DruidDataSource.class)    @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.alibaba.druid.pool.DruidDataSource", matchIfMissing = true)    static class Druid extends DruidConfiguration {        @Bean        @ConfigurationProperties("spring.datasource.druid")        public DruidDataSource dataSource(DataSourceProperties properties) {            DruidDataSource druidDataSource = (DruidDataSource)properties.initializeDataSourceBuilder().type(DruidDataSource.class).build();            DatabaseDriver databaseDriver = DatabaseDriver.fromJdbcUrl(properties.determineUrl());            String validationQuery = databaseDriver.getValidationQuery();            if (validationQuery != null) {                druidDataSource.setValidationQuery(validationQuery);            }            return druidDataSource;        }    }                @Bean        public ServletRegistrationBean statViewServlet() {                ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");                // IP白名单                servletRegistrationBean.addInitParameter("allow", "127.0.0.1,192.168.1.83");                // IP黑名单(优先级高于白名单)                servletRegistrationBean.addInitParameter("deny", "192.168.1.100");                // 控制台管理用户                servletRegistrationBean.addInitParameter("loginUsername", "liuy");                servletRegistrationBean.addInitParameter("loginPassword", "123456");                // 是否能够重置数据                servletRegistrationBean.addInitParameter("resetEnable", "false");                                return servletRegistrationBean;        }                @Bean        public FilterRegistrationBean statFilter() {                FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());                // 添加过滤规则                filterRegistrationBean.addUrlPatterns("/*");                // 忽略过滤的格式                filterRegistrationBean.addInitParameter("exclusions", "*.js,*.css,*.jpg,*.ico,/druid/*");                                return filterRegistrationBean;        }}

application.properties:

spring.profiles.active=devserver.port=9090##################################mysql数据源配置##################################spring.datasource.url=jdbc:mysql://localhost/db_test?useUnicode=true&characterEncoding=utf-8spring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.jdbc.Driver# druid连接池spring.datasource.type=com.alibaba.druid.pool.DruidDataSource# 初始化大小,最小,最大spring.datasource.druid.initial-size=5spring.datasource.druid.minIdle=5spring.datasource.druid.maxActive=20# 获取连接等待超时的时间(毫秒)spring.datasource.druid.max-wait=60000# 间隔多久进行一次检测,检测需要关闭的空闲连接(毫秒)spring.datasource.druid.time-between-eviction-runs-millis=60000# 一个连接在池中的最小生存时间(毫秒)spring.datasource.druid.min-evictable-idle-time-millis=300000spring.datasource.druid.validation-query=SELECT 1 FROM DUALspring.datasource.druid.test-while-idle=truespring.datasource.druid.test-on-borrow=falsespring.datasource.druid.test-on-return=false# 打开PSCache,并且指定每个连接上PSCache的大小spring.datasource.druid.pool-prepared-statements=truespring.datasource.druid.max-pool-prepared-statement-per-connection-size=20# 查询超时时间spring.datasource.druid.query-timeout=6000# 事务查询超时时间spring.datasource.druid.transaction-query-timeout=6000# 关闭空闲连接超时时间spring.datasource.druid.remove-abandoned-timeout=1800# sql监控配置:filter类名:stat,config,encoding,loggingspring.datasource.druid.filters=stat# 通过connect-properties属性来打开mergesql功能;慢查询记录spring.datasource.druid.connect-properties.druid.stat.meergeSql=true;spring.datasource.druid.connect-properties.druid.stat.slowSqlMillis=5000# 合并多个druidDataSource的监控数据#spring.datasource.druid.use-global-data-source-stat=true##################################mybatis基于xml集成###################################扫包mybatis.mapper-locations: classpath:mybatis/*.xml#别名mybatis.type-aliases-package: com.liuy.demo.pojo


0