spring全家桶学习-集成druid数据库连接池
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
springboot 2 集成druid
相较于hikaricp 数据源,druid 主要是提供了丰富的监控以及扩展(filter)功能
1:springboot 2 集成 druid ,pom文件配置
由于springboot2 默认内嵌了 hikaricp ,因此对于集成druid 需要排除掉依赖的hikaricp相关jar(当前操作并非必需)
<!--引入jdbc连接--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> <exclusions> <!--由于使用druid作为连接池,因此最好是排除掉默认连接池 hikaricp--> <exclusion> <artifactId>HikariCP</artifactId> <groupId>com.zaxxer</groupId> </exclusion> </exclusions> </dependency> <!--引入 druid 相关--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.1</version> <!--对于当前版本的使用建议参考druid官方文档--> </dependency>
2:application.properties 配置
# 使用 druid 相关配置,当前以默认集成的H2数据库为例
spring.datasource.druid.url=jdbc:h2:mem:foo
spring.datasource.druid.username=sa
spring.datasource.druid.password=
druid的另外一个优势点就是支持对配置文件中的password 进行加密处理,可以通过配置 密文,在服务内部进行自定义解密操作
关于密码加密相关操作
https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter
# 加密后的密码
spring.datasource.password=n/z7PyA5cvcXvs8px8FVmBVpaRyNsvJb3X7YfS38DJrIg25EbZaZGvH4aHcnc97Om0islpCAPc3MqsGvsrxVJw==
# 数据库连接时解密配置
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}
# 开启config filter
spring.datasource.druid.filter.config.enabled=true
# 公钥
public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALS8ng1XvgHrdOgm4pxrnUdt3sXtu/E8My9KzX8sXlz+mXRZQCop7NVQLne25pXHtZoDYuMh3bzoGj6v5HvvAQ8CAwEAAQ==
3: 自定义filter
在druid中本身就存在大量的内置filter, 可以查看 com.alibaba.druid jar文件中 META-INF 中 关于 druid-filter.properties文件中的定义
关于druid 1.2.1 jar META-INF/druid-filter.properties 中的属性配置;
druid.filters.default=com.alibaba.druid.filter.stat.StatFilter
druid.filters.stat=com.alibaba.druid.filter.stat.StatFilter
druid.filters.mergeStat=com.alibaba.druid.filter.stat.MergeStatFilter
druid.filters.counter=com.alibaba.druid.filter.stat.StatFilter
druid.filters.encoding=com.alibaba.druid.filter.encoding.EncodingConvertFilter
druid.filters.log4j=com.alibaba.druid.filter.logging.Log4jFilter
druid.filters.log4j2=com.alibaba.druid.filter.logging.Log4j2Filter
druid.filters.slf4j=com.alibaba.druid.filter.logging.Slf4jLogFilter
druid.filters.commonlogging=com.alibaba.druid.filter.logging.CommonsLogFilter
druid.filters.commonLogging=com.alibaba.druid.filter.logging.CommonsLogFilter
druid.filters.wall=com.alibaba.druid.wall.WallFilter
druid.filters.config=com.alibaba.druid.filter.config.ConfigFilter
druid.filters.haRandomValidator=com.alibaba.druid.pool.ha.selector.RandomDataSourceValidateFilter
可以参考 druid.filters.default=com.alibaba.druid.filter.stat.StatFilter 来实现自定义配置;具体操作按照以下流程执行
- 自定义filter类, 继承com.alibaba.druid.filter.FilterEventAdapter 类,里面提供了大量扩展点, 可以通过选择性重写相关方法来实现自定义filter增强
- 在当前项目 resources目录下 创建 META-INF/druid-filter.properties文件; 对于文件中的配置数据为 : druid.filters.自定义filter属性名称=自定义filter类全路径
- 可以通过 spring.datasource.druid.filters=需要开启的filter名称
关于filter 相关配置
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter#%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE-filter
"talk is cheap,show me the code"
代码路径: https://github.com/mengyan183/spring-family/tree/main/spring-datasource-druid
代码中只演示了单数据源,对于springboot2 版本中 druid配置多数据源 和 hikaricp配置相同,都是需要自定义bean声明

浙公网安备 33010602011771号