当前位置:   article > 正文

spring boot 自定义druid数据源,如何注入配置_datasource spring 自定义配置

datasource spring 自定义配置

依赖版本

依赖版本如下:

  1. <properties>
  2. <java.version>1.8</java.version>
  3. <spring-boot.version>2.6.11</spring-boot.version>
  4. <druid-spring-boot-starter.version>1.2.5</druid-spring-boot-starter.version>
  5. </properties>

替换但不自定义

一般情况下,我们只是替换spring boot默认的数据源为druid,这种情况下,配置文件如下:

  1. spring:
  2. datasource:
  3. driver-class-name: com.mysql.cj.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=true
  5. username: root
  6. password: 123456
  7. type: com.alibaba.druid.pool.DruidDataSource
  8. druid:
  9. initialSize: 10
  10. minIdle: 1
  11. maxActive: 20
  12. maxWait: 60000
  13. timeBetweenEvictionRunsMillis: 60000
  14. minEvictableIdleTimeMillis: 300000
  15. validationQuery: SELECT 1
  16. testWhileIdle: true
  17. testOnBorrow: false
  18. testOnReturn: false
  19. poolPreparedStatements: true
  20. maxPoolPreparedStatementPerConnectionSize: 20
  21. filters: stat,wall

这种配置是没有问题,相信这种写法在网上一搜都有很多,我们可以验证下,druid的配置是生效的。如下,启动的时候打印druid相关配置信息:

和我们配置文件中是一样,属性配置是成功注入生效的。

替换并自定义

使用druid的时候,我们可以自定义处理某些配置项,比如对数据库连接进行加密等操作。

如下,自定义一个数据源类:

  1. public class CustomDatasource extends DruidDataSource {
  2. private final DataSourceProperties properties;
  3. private final boolean unEncrypt;
  4. public CustomDatasource(DataSourceProperties properties) {
  5. this.properties = properties;
  6. String url = this.properties.getUrl();
  7. unEncrypt = url.contains("mysql") || url.contains("jdbc") || url.contains("localhost") || url.contains("127.0.0.1");
  8. }
  9. @Override
  10. public void setPassword(String password) {
  11. super.setPassword(unEncrypt ? password : AESCoderUtil.decode(password));
  12. }
  13. @Override
  14. public void setUsername(String username) {
  15. super.setUsername(unEncrypt ? username : AESCoderUtil.decode(username));
  16. }
  17. @Override
  18. public synchronized void setUrl(String url) {
  19. super.setUrl(unEncrypt ? url : AESCoderUtil.decode(url));
  20. }
  21. }

托管spring容器:

  1. @Configuration
  2. public class DatasourceConfiguration {
  3. @Bean
  4. @ConfigurationProperties(prefix = "spring.datasource")
  5. public DataSource getDataSource(DataSourceProperties properties) {
  6. DruidDataSource druidDataSource = new CustomDatasource(properties);
  7. return druidDataSource;
  8. }
  9. }

查看druid的自动配置,可以看到自定义数据源的bean存在,druid便不再创建数据源bean:

 

 但是如果还以上面配置文件的方式配置druid的属性是不生效的,如下:

与配置文件的值不一致。

这是因为我们指定注入属性前缀是spring.datasource,所以修改配置如下:

  1. spring:
  2. datasource:
  3. driver-class-name: com.mysql.cj.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=true
  5. username: root
  6. password: 123456
  7. type: com.alibaba.druid.pool.DruidDataSource
  8. # druid:
  9. initialSize: 10
  10. minIdle: 1
  11. maxActive: 20
  12. maxWait: 60000
  13. timeBetweenEvictionRunsMillis: 60000
  14. minEvictableIdleTimeMillis: 300000
  15. validationQuery: SELECT 1
  16. testWhileIdle: true
  17. testOnBorrow: false
  18. testOnReturn: false
  19. poolPreparedStatements: true
  20. maxPoolPreparedStatementPerConnectionSize: 20
  21. filters: stat,wall

 注意看注释的地方,这样就可以了。

对于一个新手,如果只是通过网络搜索资料就进行配置,万一没有配置正确并且忽略这个细节,自己不进行验证是很难发现这个配置不生效的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/52299
推荐阅读
相关标签
  

闽ICP备14008679号