<!--<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
2、application.yml
spring:
datasource:
#数据源基本配置
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/tmall?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
username: root
password: ok
#数据源其他配置
#初始化大小、最小、最大。数据库连接池的连接数,一般为(核心数*2+有效磁盘数),减少线程上下文切换开销
initialSize: 5 #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
minIdle: 5
maxActive: 20
#配置获取(指的是druid连接池的连接)连接等待超时的时间
#获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁
maxWait: 60000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒。也是testWhileIdle的判断依据
timeBetweenEvictionRunsMillis: 60000
#配置一个连接在池中最小生存时间。Destory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于minEvictableIdleTimeMillis,则关闭当前连接
minEvictableIdleTimeMillis: 300000
#验证连接的sql
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true #建议配置为true,不影响性能,并且保证安全性,如果空闲时间大于timeBetweenEvictionRunsMillis,就执行validationQuery
#检测池里连接的可用性,但很消耗性能
testOnBorrow: false #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnReturn: false #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
#打开 PSCache,并且指定每个连接上 PSCache 的大小
#druid的连接池配置中有PreparedStatementCache的配置,该信息解决了sql语句可以被预编译,并且保存在PreparedStatement这个对象中,
#而这个对象的存储就在PreparedStatementCache,对于oracle可以绕过数据库编译,有很大的提升,但是对于mysql,没有那么明显。
#这个值的设置不是越大越好,PSCache会占用jvm,占用量=连接数*PSCache设置的大小*每个PSCache占用的内存
#是否缓存preparedStatement,也就是PSCache。#PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启
poolPreparedStatements: true
#在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
maxPoolPreparedStatementPerConnectionSize: 20
#属性类型是字符串,通过别名的方式配置扩展插件,
#常用的插件有:
#监控统计用的filter:stat
#日志用的filter:log4j
# 防御sql注入的filter:wall
filters: stat,wall
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#是否自动回收超时连接
removeAbandoned : true
#超时时间,秒
removeAbandonedTimeout : 180
#指定发生removeabandoned的时候,是否记录当前线程的堆栈信息到日志中
logAbandoned: true
3、DataSourceConfig
import com.alibaba.druid.pool.DruidDataSource;
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 DataSourceConfig {
/**
* 虽然我们配置了druid连接池的其它属性,但是不会生效。因为默认是使用的java.sql.Datasource的类来获取属性的,
* 有些属性datasource没有。如果我们想让配置生效,需要手动创建Druid的配置文件
*/
@Bean
@ConfigurationProperties("spring.datasource")
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
//请求失败后是否中断
dataSource.setBreakAfterAcquireFailure(true);
//重试次数
dataSource.setConnectionErrorRetryAttempts(0);
return dataSource;
}
/**
* Druid的最强大之处在于它有着强大的监控,可以监控我们发送到数据库的所有sql语句。方便我们后期排插错误
* 配置Druid的监控
* 配置一个管理后台的Servlet
* http://localhost:8080/druid/login.html
*/
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
Map<String, String> initParams = new HashMap<>();
//登录名
initParams.put("loginUsername","admin");
//登录密码
initParams.put("loginPassword","admin");
//默认就是允许所有访问
initParams.put("allow","");
//拒接访问
//initParams.put("deny","127.0.0.1");
registrationBean.setInitParameters(initParams);
return registrationBean;
}
/**
* 配置一个web监控的filter
*/
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String,String> initParams = new HashMap<>();
initParams.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}