springboot系列-集成Druid

【Druid】

认识:com.alibaba.druid - 数据库连接池 - Druid能够提供强大的监控和扩展功能。
Github:
https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

【应用】

1 导入依赖-pom

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid-version}</version>
    </dependency>
 Maven仓库查找公共的仓库地址: http://www.mvnrepository.com/artifact/com.alibaba/druid

或者
  <dependency>
   <groupId>com.alibaba</groupId>
  <artifactId>druid-spring-boot-starter</artifactId>
  <version>1.1.20</version>
  </dependency>

2 配置

配置文件:application.yml

配置文件:
  application.yml
配置文件中配置内容:、
(1)参考官方文档
(2)通过idea,在jar包查:
      查看源码位置:
        druidxxx.jar /
        com.alibaba.druid /
        pool /
        DruidDataSource
他是
<class,
extends DruidAbstractDataSource,
implements DrudiDataSourceMbean ManagedDataSource, Referenceable, Closeable, Cloneable, ConnectionPoolDataSource, MBeanRegistration>
配置的内容其实就是
  DruidDataSource
  DruidAbstractDataSource
  中的属性(总的来说就是给DruidDataSource中的属性赋值)
仅供参考:

spring: profiles: active: dev # 当前使用开发阶段的配置文件 datasource: # 数据源 # driver
-class-name: com.mysql.cj.jdbc.Driver # url: jdbc:mysql://localhost:3306/xx # username: root # password: root type: com.alibaba.druid.pool.DruidDataSource # 使用Druid数据源 # platform: mysql # druid数据源专有配置 druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/xx username: root password: root initialSize: 5 # 初始化时建立的连接数 minIdle: 5 # 最小连接数 maxActive: 20 # 最大连接数 maxWait: 60000 # 获取连接最大等待时间,单位:毫秒 pool-prepared-statements: false # 是否缓存preparedStatement timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: select 1 from dual # 检测连接是否失效的sql testOnBorrow: false testWhileIdle: true testOnReturn: false # 配置监控统计拦截的filter # stat:监控统计;wall:防御sql注入;log4j:日志记录 filters: stat,wall,log4j2
    maxPoolPreparedStatementPerConnectionSize: 20  # 最大preparedStatement缓存数,当pool-prepared-statements=true时需要大于0
      useGlobalDataSourceStat: true
      connectProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
【 以下内容可在applcation.yml文件中配置,也可在配置类中配置----亲测 】

# # web
-stat-filter: # 数据库连接池监控统计插件 # enabled: true # url-pattern: /* # exclusions: '*.gif,*.png,*.jpg,*.html,*.js,*.css,*.ico,/druid/*' # 过滤掉请求 # stat-view-servlet: # 数据库连接池监控页面插件 # enabled: true # url-pattern: '/druid/*' # reset-enable: true # login-username: admin # login-password: admin # allow: # deny:

 

配置类 - 加入spring容器启动时加载-使druid的其他功能:监控...等生效

配置类的内容

package pers.sun.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
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 javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class DruidConfig {

/**
* "@bean"-->声明(或者说往spring容器中注册) DataSource(方法的返回类的实例)
*/
//与application.yml中的配置参数绑定-只要名字一样就会自动注入
@ConfigurationProperties(prefix = "spring.datasource.druid")
@Bean
public DataSource druidDataSource(){
return new DruidDataSource();
/*return DruidDataSourceBuilder.create().build();*/
}


/**
* "@bean"-->声明(或者说往spring容器中注册) ServletRegistrationBean(方法的返回类的实例)
*/
/*
配置一个管理后台的serlvet
注册Druid的监控(stat)的servlet;
在web项目中应该是在web.xml中注册一个servlet(就可以处理相应的请求URL),
但是springboot内置了servlet容器没有web.xml,
所以提供ServletRegistrationBean来实现
同理设置filter
*/
//开启Druid的监控-可以访问Druid内置的页面了
@Bean
public ServletRegistrationBean statViewServlet(){
//一定要配置这个UrlMapping=="/druid/*"---要不然会拦截所有请求到/druid/login.html#/
ServletRegistrationBean<StatViewServlet> bean=new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");

//登录账户密码-用于登录druid自带的后台监控页面
//loginUsername,loginPassword是固定的名字
HashMap<String ,String> initParameters=new HashMap<>();
initParameters.put("loginUsername","admin");
initParameters.put("loginPassword","123456");
initParameters.put("allow","localhost"); //允许谁可以访问,默认所有
//initParameters.put("deny","ip"); //禁止xxxx访问

bean.setInitParameters(initParameters);
return bean;
}

//配置一个监控的filter
//在springboot中注册一个filter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean=new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());//WebStatFilter:com.alibaba.druid.support.http提供
Map<String,String> initParameters=new HashMap<>();

//设置以下请求不拦截
initParameters.put("exclusions","*.js,*.css,/druid/*");

bean.setInitParameters(initParameters);
bean.setUrlPatterns(Arrays.asList("/*"));//filter拦截那些请求
return bean;
}


/**
* 3部分内容
* 一个Datasource
* 一个servlet拦截请求
* 一个filter过滤请求
* 都要加入spring容器中
*/
}

 

posted @ 2020-08-14 18:39  #Kouch  阅读(330)  评论(0)    收藏  举报