druid连接池
连接池
数据库连接池是一个存储数据库连接的缓冲区,用于重复使用这些连接,以避免在每次请求时都创建新的数据库连接。连接到数据库的过程是相对耗时的,因此连接池可以显著提高应用程序的性能。它们还有助于防止应用程序超负荷地创建太多数据库连接,从而减轻数据库服务器的负担。
druid的Maven依赖
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.6</version> <!-- 使用最新版本 -->
</dependency>
通常需要引入log4j,不导入可能会报java.lang.ClassNotFoundException: org.apache.log4j.Priority错误<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>
druid的Springboot配置
spring: datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8username: 数据库用户名password: 数据库密码type: com.alibaba.druid.pool.DruidDataSource#druid配置# 初始化大小initiaSize: 5#最小线程minIdle: 5#最大线程maxActive: 20#获取连接的等待超时时间maxWait: 60000#多久进行一次检测,检测需要关闭的空闲连接,单位毫秒timeBetweenEvictionRunsMillis: 60000#配置一个连接在池中的最小生存时间minEvictableIdleTimeMillis: 30000# 检测空闲连接的可用性validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: false# 预处理语句池化(提升高频 SQL 执行效率)pool-prepared-statements: true # 启用缓存max-pool-prepared-statement-per-connection-size: 20 # 单连接缓存数max-open-prepared-statements: 100 # 全局缓存上限#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入(防火墙)filters: stat,wall,log4j# 合并多个DruidDataSource的监控数据useGlobalDataSourceStat: true# 通过connectProperties属性来打开mergeSql功能;慢SQL记录connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
配置类
需要自行添加到容器中并绑定属性
@Configuration
public class DruidConfig{@Bean@ConfigurationProperties(prefix="Spring.datasource")public DataSource druidDataSource(){return new DruidDataSource();}
}
配置后台监控
Druid具有监控功能,有一个后台监控页面,配置后即可使用
监控页面页面:http://localhost:8080/druid/
// 后台监控@Beanpublic ServletRegistrationBean statViewServlet() {ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*"); // 设置后台路径HashMap<String, String> initParams = new HashMap<>();initParams.put("loginUsername", "admin"); // 登录账号initParams.put("loginPassword", "123456"); // 登录密码initParams.put("allow", ""); // 允许所有访问bean.setInitParameters(initParams); // 设置初始化参数return bean;}
配置web监控过滤器
// web监控过滤器@Beanpublic FilterRegistrationBean webStatFilter() {FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();bean.setFilter(new WebStatFilter());Map<String, String> initParams = new HashMap<>();initParams.put("exclusions", "*.js, *.css, /druid/*"); // 过滤排除bean.setInitParameters(initParams);return bean;}