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容器中
*/
}
--------------------------------------------------------------------------------------------------------------------------

浙公网安备 33010602011771号