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 来实现自定义配置;具体操作按照以下流程执行

  1. 自定义filter类, 继承com.alibaba.druid.filter.FilterEventAdapter 类,里面提供了大量扩展点, 可以通过选择性重写相关方法来实现自定义filter增强
  2. 在当前项目 resources目录下  创建 META-INF/druid-filter.properties文件; 对于文件中的配置数据为 :  druid.filters.自定义filter属性名称=自定义filter类全路径
  3. 可以通过  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声明

posted @ 2020-12-15 13:31  郭星  阅读(490)  评论(0)    收藏  举报