1、Druid是什么
Druid是一个阿里开源的数据库连接池和监控平台,它主要用于管理和监控数据库连接,提供了高性能、可靠性和丰富的功能。
2、Druid的作用
1、数据库连接池管理:Druid提供了高性能的数据库连接池,能够有效地管理数据库连接的创建、复用和释放,减少了数据库连接的创建和销毁的开销,提高了系统的性能和响应速度。
2、监控和统计:Druid内置了丰富的监控和统计功能,可以实时地监控数据库连接的使用情况、SQL执行情况、连接池状态等,帮助开发人员了解系统的运行状况,并提供了详细的统计数据用于性能调优和故障排查。
3、防御SQL注入攻击:Druid内置了SQL注入攻击的防御机制,能够对传入的SQL语句进行检测和过滤,提供了一定程度的安全保护。
4、数据库连接的可配置性:Druid提供了丰富的配置选项,可以灵活地配置连接池的参数,包括最大连接数、最小连接数、连接超时时间等,以适应不同的应用场景和需求。
3、Druid的优势
相比于传统的数据源,Druid数据源的优势在于:
1、高性能:Druid使用了多种优化技术,包括连接池的复用、连接的预创建、异步IO等,能够提供更高的性能和吞吐量,减少数据库连接的开销。
2、监控和统计:Druid内置了丰富的监控和统计功能,能够实时监控数据库连接的使用情况和SQL执行情况,帮助开发人员及时发现和解决潜在的性能问题。
3、安全性:Druid提供了SQL注入攻击的防御机制,能够对传入的SQL语句进行检测和过滤,提供一定程度的安全保护。
4、可配置性:Druid提供了灵活的配置选项,可以根据实际需求进行调整和配置,包括连接池参数、监控参数等,以满足不同应用场景的需求。
4、集成Druid
4.1、添加依赖
在pom.xml中添加以下依赖:
<!-- Druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
4.2、添加配置
在application.yml中添加如下配置:
spring:
datasource:
name: druidDataSource
type: com.alibaba.druid.pool.DruidDataSource
druid:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/passion?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
username: root
password: root
filters: stat,wall,log4j,config
max-active: 100
initial-size: 1
max-wait: 60000
min-idle: 1
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: select 'x'
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-open-prepared-statements: 50
max-pool-prepared-statement-per-connection-size: 20
在上述配置中,filters 是用于配置 Druid 数据源的过滤器(filters)。过滤器可以对数据源的连接和操作进行监控和管理,提供一些额外的功能和安全性。
stat:用于统计数据源的使用情况,包括连接数、执行SQL的次数等,可以通过 Druid 监控平台查看这些统计信息。
wall:用于防御 SQL 注入攻击,WallFilter 是防御 SQL 注入的重要组件,可以实现防御一些常见的 SQL 注入攻击。
log4j:用于记录 Druid 的日志信息,可以将 Druid 的日志输出到 log4j 日志系统中。
config:用于加载 Druid 数据源的配置文件,可以通过这个过滤器加载自定义的配置项。
在这里需要添加log4j依赖,否则启动项目会报错
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
添加log4j.properties配置文件(在resource目录下)
### set log levels ###
log4j.rootLogger = INFO,DEBUG, console, infoFile, errorFile ,debugfile,mail
LocationInfo=true
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m %x %n
log4j.appender.infoFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.infoFile.Threshold = INFO
log4j.appender.infoFile.File = C:/logs/log
log4j.appender.infoFile.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.infoFile.Append=true
log4j.appender.infoFile.layout = org.apache.log4j.PatternLayout
log4j.appender.infoFile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m %x %n
log4j.appender.errorFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorFile.Threshold = ERROR
log4j.appender.errorFile.File = C:/logs/error
log4j.appender.errorFile.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.errorFile.Append=true
log4j.appender.errorFile.layout = org.apache.log4j.PatternLayout
log4j.appender.errorFile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m %x %n
log4j.appender.debugfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.debugfile.Threshold = DEBUG
log4j.appender.debugfile.File = C:/logs/debug
log4j.appender.debugfile.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.debugfile.Append=true
log4j.appender.debugfile.layout = org.apache.log4j.PatternLayout
log4j.appender.debugfile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m %x %n
如果需要通过定制的配置文件对Druid进行自定义属性配置,添加下面的配置类
package com.zhang.passion.admin.config;
import org.springframework.boot