SpringBoot集成Druid的三种方式(java类,注解,ymal)

SpringBoot集成Druid

5
druid github

druid官方文档

Druid

  • 是一个阿里开源的连接池组件
  • 加⼊了日志监控,不需要额外的界面开发
  • 它不仅仅是一个数据库连接池,它的功能还包括监控和详细统计数据库访问性能,对数据库密码进行加密

在springboot 2.0 以上默认都是使⽤用Hikari数据源, Hikari与Druid都是当前⽐比较优秀的数据源

com.alibaba.druid.pool.DruidDataSource 基本配置参数如下:

配置缺省值说明
name配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。 如果没有配置,将会生成一个名字,格式是:“DataSource-” + System.identityHashCode(this)
jdbcUrl连接数据库的url,不同数据库不一样。例如: mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username连接数据库的用户名
password连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter
driverClassName根据url自动识别 这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName(建议配置下)
initialSize0初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
maxActive8最大连接池数量
maxIdle8已经不再使用,配置了也没效果
minIdle最小连接池数量
maxWait获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
poolPreparedStatementsfalse是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
maxOpenPreparedStatements-1要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
validationQuery用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。
testOnBorrowtrue申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
validationQueryTimeout单位:秒,检测连接是否有效的超时时间。底层调⽤用jdbc Statement对象的void setQueryTimeout(int seconds)⽅方法
testOnReturnfalse归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testWhileIdlefalse建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
timeBetweenEvictionRunsMillis1分钟(1.0.14)有两个含义: 1) Destroy线程会检测连接的间隔时间2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
numTestsPerEvictionRun不再使用,一个DruidDataSource只支持一个EvictionRun
minEvictableIdleTimeMillis30分钟(1.0.14)连接保持空闲⽽而不不被驱逐的最⻓长时间
connectionInitSqls物理连接初始化的时候执行的sql
exceptionSorter根据dbType自动识别当数据库抛出一些不可恢复的异常时,抛弃连接
filters属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
proxyFilters类型是List<com.alibaba.druid.filter.
maxPoolPreparedStatementPerConnectionSize10要启⽤用PSCache,必须配置⼤大于0,当⼤大于0时poolPreparedStatements自动触发修改为true。单个connnection独享⼀一个statement cache,也就是说maxOpenPreparedStatements是针对单个connection链接的

连接池运行原理

  • 连接池初始化的时候按照initialSize创建多个连接
  • 有DB操作访问的时候,就从里面取一个
  • 如果当前正在使用的连接=maxActive,就会进入等待,没有到maxActive拿一个空闲连接,没有空闲就创建一个新连接,等待超过maxWati则会报错
  • 使用完毕还回去等待其它人用,不会物理销毁
  • 每一个connection在连接池里都有空闲时长的,允许最大空闲时长:minEvictableldleTimeMillis,多久检测一次timeBetweenEvictionRunsMillis
  • maxActive如何配置:理论上应该设置成最大并发数
  • 只要连接被前端业务拿到就算不空闲了,这个时候如果说长时间占有连接,连接数是不会崩溃,连接池主动关闭是使用中的连接,属于一个高级功能
    removeAbandoned=“true”
    removeAbandonedTimeout=“60”
    logAbandoned=“true”

知道了连接池的运行原理之后,我们就正式来用SpringBoot来集成它吧

java类配置

2

导入依赖:
正确的依赖:
 <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.17</version>
</dependency>


错误的依赖,使用这个yml是没有提示的
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.2.6</version>
 </dependency>
编写配置文件:application.yaml
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      username: root
      password: root
      url: jdbc:mysql://localhost:3306/mybatis?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
      driver-class-name: com.mysql.cj.jdbc.Driver
编写配置类:
@Configuration
public class DruidConfig {

    @ConfigurationProperties(prefix = "spring.datasource.druid")
    @Bean
    public DruidDataSource druidDataSource() throws SQLException {
        DruidDataSource dataSource = new DruidDataSource();
        //加入监控功能,开启防火墙
        dataSource.setFilters("stat,wall");
        return dataSource;
    }

    /**
     * druid
     * 注册一个StatViewServlet
     */
    //因为Springboot内置了servlet容器,所以没有web.xml,替代方法就是将ServletRegistrationBean注册进去
    //加入后台监控
    @Bean  //这里其实就相当于servlet的web.xml
    public ServletRegistrationBean statViewServlet() {
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> srb = new ServletRegistrationBean<>(statViewServlet, "/druid/*");
        // 添加IP白名单
        srb.addInitParameter("allow", "127.0.0.1");
        // 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
        srb.addInitParameter("deny", "192.168.25.123");
        // 添加控制台管理用户
        srb.addInitParameter("loginUsername", "admin");
        srb.addInitParameter("loginPassword", "123456");
        // 是否能够重置数据
        srb.addInitParameter("resetEnable", "false");
        return srb;
    }

    //再配置一个过滤器,Servlet按上面的方式注册Filter也只能这样

    /**
     * druid过滤器
     * 注册一个:filterRegistrationBean
     */
    @Bean
    public FilterRegistrationBean webStatFilter(){
        WebStatFilter webStatFilter = new WebStatFilter();
        FilterRegistrationBean<WebStatFilter> filterFilter=new FilterRegistrationBean<>(webStatFilter);
        //添加过滤规则.
        filterFilter.addUrlPatterns("/*");//拦截所有资源
//        filterFilter.setUrlPatterns(Arrays.asList("/*"));//拦截所有资源
        //以下资源不拦截*.js,*.gif,*.jpg,*.css等
        filterFilter.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.css,*.ico,/druid/*");
        return filterFilter;
    }
}

sql监控

配置_StatViewServlet配置

Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。

这个StatViewServlet的用途包括:

  • 提供监控信息展示的html页面
  • 提供监控信息的JSON API

注意:使用StatViewServlet,建议使用druid 0.2.6以上版本。

配置监控页面访问密码

需要配置Servlet的 loginUsername loginPassword这两个初始参数。

 @ConfigurationProperties(prefix = "spring.datasource.druid")
    @Bean
    public DruidDataSource druidDataSource() throws SQLException {
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;
    }
/**
     * druid
     * 注册一个StatViewServlet
     */
    //因为Springboot内置了servlet容器,所以没有web.xml,替代方法就是将ServletRegistrationBean注册进去
    //加入后台监控
    @Bean 
    public ServletRegistrationBean statViewServlet() {
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> srb = new ServletRegistrationBean<>(statViewServlet, "/druid/*");
        // 添加IP白名单
        srb.addInitParameter("allow", "127.0.0.1");
        // 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
        srb.addInitParameter("deny", "192.168.25.123");
        // 添加控制台管理用户
        srb.addInitParameter("loginUsername", "admin");
        srb.addInitParameter("loginPassword", "123456");
        // 是否能够重置数据
        srb.addInitParameter("resetEnable", "false");
        return srb;
    }

光这样还是不行,还需要打开Druid的监控统计功能

打开Druid的监控统计功能
配置_StatFilter

Druid内置提供一个StatFilter,用于统计监控信息。StatFilter的别名是stat

修改代码

 @ConfigurationProperties(prefix = "spring.datasource.druid")
    @Bean
    public DruidDataSource druidDataSource() throws SQLException {
        DruidDataSource dataSource = new DruidDataSource();
        //加入监控功能
        dataSource.setFilters("stat");
        return dataSource;
    }
(*) property for user to setup 错误

image-20210709170739921

问题根源

导致这个现象的根源是,项目中之前一直没有没有连接过一次数据库,没有使用过一次Database,也导致 database 的 init 方法没有初始化,所以这里是没有相关的信息的。

解决方案:

在项目中成功发送一次请求,需要连接一次数据库,简单查询一些数据就可以了。

控制层写下sql代码

@Controller
public class UserController {
    @Autowired
    JdbcTemplate jdbc;
    @ResponseBody
    @RequestMapping("/sql")
    public String queryFromDb(){
        Long aLong = jdbc.queryForObject("select count(*) from sys_role",Long.class);
        return aLong.toString();
    }

然后访问sql路径

配置WebStatFilter

WebStatFilter用于采集web-jdbc关联监控的数据。

 @Bean
    public FilterRegistrationBean webStatFilter(){
        WebStatFilter webStatFilter = new WebStatFilter();
        FilterRegistrationBean<WebStatFilter> filterFilter=new FilterRegistrationBean<>(webStatFilter);
        //添加过滤规则.
        filterFilter.setUrlPatterns(Collections.singletonList("/*"));//拦截所有资源
        //以下资源不拦截*.js,*.gif,*.jpg,*.css等
        filterFilter.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.css,*.ico,/druid/*");
        return filterFilter;
    }
}

配置 wallfilter(防火墙)

image-20210709203452766

 @ConfigurationProperties(prefix = "spring.datasource.druid")
    @Bean
    public DruidDataSource druidDataSource() throws SQLException {
        DruidDataSource dataSource = new DruidDataSource();
        //加入监控功能,开启防火墙
        dataSource.setFilters("stat,wall");
        return dataSource;
    }

综合演示视频

602

注解配置druid

6
先了解一下下面几个注解

@WebServlet

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
    String name() default "";

    String[] value() default {};

    String[] urlPatterns() default {};

    int loadOnStartup() default -1;

    WebInitParam[] initParams() default {};

    boolean asyncSupported() default false;

    String smallIcon() default "";

    String largeIcon() default "";

    String description() default "";

    String displayName() default "";
}

下面是@WebServlet的属性列表。

属性名类型描述
nameString指定Servlet 的 name 属性,等价于 servlet-name。如果没有显式指定,则该 Servlet 的取值即为类的全限定名。
valueString[]该属性等价于 urlPatterns 属性。两个属性不能同时使用。
urlPatternsString[]指定一组 Servlet 的 URL 匹配模式。等价于url-pattern标签。
loadOnStartupint指定 Servlet 的加载顺序,等价于 load-on-startup标签。
initParamsWebInitParam[]指定一组 Servlet 初始化参数,等价于init-param标签。
asyncSupportedboolean声明 Servlet 是否支持异步操作模式,等价于async-supported 标签。
descriptionString该 Servlet 的描述信息,等价于 description标签。
displayNameString该 Servlet 的显示名,通常配合工具使用,等价于 display-name标签。

如:

@WebServlet(
    urlPatterns = {"/simple"}, 
    asyncSupported = true, 
    loadOnStartup = -1, 
    name = "SimpleServlet", 
    displayName = "ss", 
    initParams = {
        @WebInitParam(name = "username", value = "tom")
    } 
) 
public class SimpleServlet extends HttpServlet{}

等价于

<servlet>
    <display-name>ss</display-name>
    <servlet-name>SimpleServlet</servlet-name>
    <servlet-class>footmark.servlet.SimpleServlet</servlet-class>
    <load-on-startup>-1</load-on-startup>
    <async-supported>true</async-supported>
    <init-param>
        <param-name>username</param-name>
        <param-value>tom</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>SimpleServlet</servlet-name>
    <url-pattern>/simple</url-pattern>
</servlet-mapping>

@WebInitParam

源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebInitParam {
    String name();

    String value();

    String description() default "";
}

该注解通常不单独使用,而是配合 @WebServlet 或者 @WebFilter 使用。它的作用是为 Servlet 或者过滤器指定初始化参数,这等价于 web.xml 中 和 的 子标签。

@WebInitParam 具有下表给出的一些常用属性:

属性名类型是否可选描述
nameString指定参数的名字,等价于 param-name。
valueString指定参数的值,等价于 param-value。
descriptionString关于参数的描述,等价于 description。
  initParams = {
        @WebInitParam(name = "username", value = "tom")
        @WebInitParam(name = "password", value = "123456")
    } 

等价于

<init-param>
        <param-name>username</param-name>
        <param-value>tom</param-value>
     	<param-name>password</param-name>
        <param-value>123456</param-value>
</init-param>
也就是说
@WebInitParam(name = "", value = "")
等价于 <param-name></param-name>
       <param-value></param-value>

@WebFilter

源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebFilter {
    String description() default "";

    String displayName() default "";

    WebInitParam[] initParams() default {};

    String filterName() default "";

    String smallIcon() default "";

    String largeIcon() default "";

    String[] servletNames() default {};

    String[] value() default {};

    String[] urlPatterns() default {};

    DispatcherType[] dispatcherTypes() default {DispatcherType.REQUEST};

    boolean asyncSupported() default false;
}

@WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值 )

属性名类型描述
filterNameString指定过滤器的 name 属性,等价于 filter-name
valueString[]该属性等价于 urlPatterns 属性。但是两者不应该同时使用。
urlPatternsString[]指定一组过滤器的 URL 匹配模式。等价于url-pattern 标签。
servletNamesString[]指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 servlet-name 的取值。
dispatcherTypesDispatcherType指定过滤器的转发模式。具体取值包括:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。
initParamsWebInitParam[]指定一组过滤器初始化参数,等价于 init-param 标签。
asyncSupportedboolean声明过滤器是否支持异步操作模式,等价于async-supported 标签。
descriptionString该过滤器的描述信息,等价于 description 标签。
displayNameString该过滤器的显示名,通常配合工具使用,等价于display-name 标签。

如:

@WebFilter(servletNames = {"SimpleServlet"},filterName="druidWebStatFilter") 
public class LessThanSixFilter implements Filter{...} 

等价于

<filter> 
    <filter-name>druidWebStatFilter</filter-name> 
    <filter-class>xxx</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>SimpleFilter</filter-name> 
    <servlet-name>SimpleServlet</servlet-name> 
</filter-mapping> 

@WebListener

该注解用于将类声明为监听器,被 @WebListener 标注的类必须实现以下至少一个接口:

ServletContextListener
ServletContextAttributeListener
ServletRequestListener
ServletRequestAttributeListener
HttpSessionListener
HttpSessionAttributeListener
该注解使用非常简单,其属性如下:

源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebListener {
    String value() default "";
}

@WebListener 的常用属性

属性名类型是否可选描述
valueString该监听器的描述信息。

如:

@WebListener("This is only a demo listener") 
public class SimpleListener implements ServletContextListener{...} 

如此,则不需要在 web.xml 中配置 标签了。它等价的 web.xml 中的配置形式如下:

<listener> 
    <listener-class>footmark.servlet.SimpleListener</listener-class> 
</listener> 

@MultipartConfig

源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MultipartConfig {
    String location() default "";

    long maxFileSize() default -1L;

    long maxRequestSize() default -1L;

    int fileSizeThreshold() default 0;
}

该注解主要是为了辅助 Servlet 3.0 中 HttpServletRequest 提供的对上传文件的支持。该注解标注在 Servlet 上面,以表示该 Servlet 希望处理的请求的 MIME 类型是 multipart/form-data。另外,它还提供了若干属性用于简化对上传文件的处理。具体如下:

@MultipartConfig 的常用属性

属性名类型是否可选描述
fileSizeThresholdint当数据量大于该值时,内容将被写入文件
locationString存放生成的文件地址。
maxFileSizelong允许上传的文件最大值。默认值为 -1,表示没有限制。
maxRequestSizelong针对该 multipart/form-data 请求的最大数量,默认值为 -1,表示没有限制。
编写配置文件:application.yaml
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/vueadmin?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
编写配置类:
@Configuration
public class DruidConfig {

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DruidDataSource druidDataSource() throws SQLException {
        DruidDataSource dataSource = new DruidDataSource();
        //加入监控功能,开启防火墙
        dataSource.setFilters("stat,wall");
        return dataSource;
    }

    @WebServlet(urlPatterns = "/druid/*",
            initParams={
                    @WebInitParam(name="allow",value=""),// IP白名单 (没有配置或者为空,则允许所有访问)
                    @WebInitParam(name="deny",value=""),// IP黑名单 (存在共同时,deny优先于allow)
                    @WebInitParam(name="loginUsername",value="admin"),// 用户名
                    @WebInitParam(name="loginPassword",value="admin"),// 密码
                    @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
            })
    public static class DruidStatViewServlet extends StatViewServlet {
    }

    @WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",
            initParams={
                    @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源
            })
    public static class DruidStatFilter  extends WebStatFilter {


    }
}
在启动类添加注解 @ServletComponentScan
//配置druid必须加的注解,如果不加,访问页面打不开,filter和servlet、listener之类的需要单独进行注册才能使用,spring boot里面提供了该注解起到注册作用
@ServletComponentScan(basePackages="com.zsq")
@SpringBootApplication(scanBasePackages="com.zsq")
public class SpringbootZsqDemoApplication {
 
    public static void main(String[] args)throws Exception{
        SpringApplication.run(MainApplication.class,args);
    }
 
}
演示:

604

yml配置druid

3

源码分析

我们在com.alibaba.druid.spring.boot.autoconfigure包下找到DruidDataSourceAutoConfigure或者直接ctrl+N搜

image-20210710090114678

@Configuration
@ConditionalOnClass({DruidDataSource.class})
@AutoConfigureBefore({DataSourceAutoConfiguration.class})
@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})
@Import({DruidSpringAopConfiguration.class, DruidStatViewServletConfiguration.class, DruidWebStatFilterConfiguration.class, DruidFilterConfiguration.class})
public class DruidDataSourceAutoConfigure {
    private static final Logger LOGGER = LoggerFactory.getLogger(DruidDataSourceAutoConfigure.class);

    public DruidDataSourceAutoConfigure() {
    }

    @Bean(
        initMethod = "init"
    )
    @ConditionalOnMissingBean
    public DataSource dataSource() {
        LOGGER.info("Init DruidDataSource");
        return new DruidDataSourceWrapper();
    }
}

image-20210710092303820

DruidStatProperties.class的部分源码截图

扩展配置项 spring.datasource.druid

image-20210710092448282

DataSourceProperties.class的部分源码截图image-20210710092639890

DruidSpringAopConfiguration.class

DruidSpringAopConfiguration.class,监控SpringBean的;配置项:spring.datasource.druid.aop-patterns

image-20210710093020913

DruidStatViewServletConfiguration.class

DruidStatViewServletConfiguration.class, 监控页的配置:spring.datasource.druid.stat-view-servlet;默认开启

image-20210710094131918

DruidWebStatFilterConfiguration.class

DruidWebStatFilterConfiguration.class, web监控配置;spring.datasource.druid.web-stat-filter;默认开启image-20210710094625088

DruidFilterConfiguration.class

所有Druid自己filter的配置

image-20210710095109019

public class DruidFilterConfiguration {
    private static final String FILTER_STAT_PREFIX = "spring.datasource.druid.filter.stat";
    private static final String FILTER_CONFIG_PREFIX = "spring.datasource.druid.filter.config";
    private static final String FILTER_ENCODING_PREFIX = "spring.datasource.druid.filter.encoding";
    private static final String FILTER_SLF4J_PREFIX = "spring.datasource.druid.filter.slf4j";
    private static final String FILTER_LOG4J_PREFIX = "spring.datasource.druid.filter.log4j";
    private static final String FILTER_LOG4J2_PREFIX = "spring.datasource.druid.filter.log4j2";
    private static final String FILTER_COMMONS_LOG_PREFIX = "spring.datasource.druid.filter.commons-log";
    private static final String FILTER_WALL_PREFIX = "spring.datasource.druid.filter.wall";
    private static final String FILTER_WALL_CONFIG_PREFIX = "spring.datasource.druid.filter.wall.config";
    。。。。
}

官网使用的方式

地址

官网使用的是properties,简单变一下就行了

image-20210710100709829

image-20210710101128797

image-20210710101311691

对应的yml形式

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/vueadmin?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    druid:
      #2.连接池配置
      #初始化连接池的连接数量 大小,最小,最大
      initial-size: 5
      min-idle: 5
      max-active: 20
      #配置获取连接等待超时的时间
      max-wait: 60000
      #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 30000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: true
      test-on-return: false
      # 是否缓存preparedStatement,也就是PSCache  官方建议MySQL下建议关闭   个人建议如果想用SQL防火墙 建议打开
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20



      # Spring监控配置
      aop-patterns: com.zsq.*
       # 配置监控统,防火墙,日志
      filters: wall,start,slf4j
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filter:
        stat:
          merge-sql: true
          slow-sql-millis: 5000
          log-slow-sql: true
          enabled: true
        wall:
          enabled: true

      #3.基础监控配置
      web-stat-filter:
        enabled: true
        url-pattern: /*
        #设置不统计哪些URL
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
        session-stat-enable: true
        session-stat-max-count: 100

        #设置监控页面
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        reset-enable: false
        #设置监控页面的登录名和密码
        login-username: admin
        login-password: admin
        allow: 127.0.0.1
        #deny: 192.168.1.100

演示

603

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值