个人随笔
目录
十、SpringBoot2.0整合C3P0、Druid数据库连接池
2020-09-11 22:34:19

SpringBoot整合数据库连接池其实是很简单的,不管是c3p0还是Druid,步骤都一样,都是在pom.xml中加入依赖,在application.yml加入连接信息,再加上一个配置类即可。

一、整合C3P0

1、pom.xml加入如下依赖

  1. <dependency>
  2. <groupId>com.mchange</groupId>
  3. <artifactId>c3p0</artifactId>
  4. <version>0.9.5.2</version>
  5. </dependency>

这里要注意c3p0的版本,有时候版本太低的话跟mybatis整合在一起可能会报错。

2、application.yml加入如下配置

  1. c3p0:
  2. jdbcUrl: jdbc:mysql://127.0.0.1:3306/weixinser
  3. user: root
  4. password: forever
  5. driverClass: com.mysql.jdbc.Driver
  6. minPoolSize: 2
  7. maxPoolSize: 10
  8. maxIdleTime: 1800000
  9. acquireIncrement: 3
  10. maxStatements: 1000
  11. initialPoolSize: 3
  12. idleConnectionTestPeriod: 60
  13. acquireRetryAttempts: 30
  14. acquireRetryDelay: 1000
  15. breakAfterAcquireFailure: false
  16. testConnectionOnCheckout: false

3、新建一个配置类

  1. package cn.forever.config;
  2. import javax.sql.DataSource;
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.boot.context.properties.ConfigurationProperties;
  5. import org.springframework.boot.jdbc.DataSourceBuilder;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.context.annotation.Primary;
  9. @Configuration
  10. public class DataSourceConfiguration {
  11. // c3p0 连接池
  12. @Bean(name = "dataSource")
  13. @Qualifier(value = "dataSource")
  14. @Primary
  15. @ConfigurationProperties(prefix = "c3p0")
  16. public DataSource dataSource() {
  17. return DataSourceBuilder.create().type(com.mchange.v2.c3p0.ComboPooledDataSource.class).build();
  18. }
  19. }

然后程序就自动回使用c3p0连接池啦

e二、整合Druid

其实是一样的模式,但是druid的话可能需要在maven上加入阿里云的镜像

1、pom.xml加入如下依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>druid</artifactId>
  4. <version>1.1.12</version>
  5. </dependency>

2、application.yml加入如下配置

  1. spring:
  2. datasource:
  3. type: com.alibaba.druid.pool.DruidDataSource
  4. url: jdbc:mysql://127.0.0.1:3306/sb
  5. #生产环境
  6. #username: itweb
  7. #password: LWHMHM@1205
  8. #开发环境
  9. username: root
  10. password: forever
  11. driverClassName: com.mysql.jdbc.Driver
  12. #连接池的配置信息
  13. initialSize: 5
  14. minIdle: 5
  15. maxActive: 20
  16. maxWait: 60000
  17. timeBetweenEvictionRunsMillis: 60000
  18. minEvictableIdleTimeMillis: 300000
  19. validationQuery: SELECT 1 FROM DUAL
  20. testWhileIdle: true
  21. testOnBorrow: false
  22. testOnReturn: false
  23. poolPreparedStatements: true
  24. maxPoolPreparedStatementPerConnectionSize: 20
  25. #wall, 去掉这个,不然会报sql injection violation
  26. filters: stat,log4j
  27. connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

3、新建一个配置类

  1. package cn.myforever.blog.config;
  2. import com.alibaba.druid.pool.DruidDataSource;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.context.annotation.Primary;
  7. import javax.sql.DataSource;
  8. import java.sql.SQLException;
  9. @Configuration
  10. public class DruidDataSourceConfiguration {
  11. @Value("${spring.datasource.url}")
  12. private String dbUrl;
  13. @Value("${spring.datasource.username}")
  14. private String username;
  15. @Value("${spring.datasource.password}")
  16. private String password;
  17. @Value("${spring.datasource.driverClassName}")
  18. private String driverClassName;
  19. @Value("${spring.datasource.initialSize}")
  20. private int initialSize;
  21. @Value("${spring.datasource.minIdle}")
  22. private int minIdle;
  23. @Value("${spring.datasource.maxActive}")
  24. private int maxActive;
  25. @Value("${spring.datasource.maxWait}")
  26. private int maxWait;
  27. @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
  28. private int timeBetweenEvictionRunsMillis;
  29. @Value("${spring.datasource.minEvictableIdleTimeMillis}")
  30. private int minEvictableIdleTimeMillis;
  31. @Value("${spring.datasource.validationQuery}")
  32. private String validationQuery;
  33. @Value("${spring.datasource.testWhileIdle}")
  34. private boolean testWhileIdle;
  35. @Value("${spring.datasource.testOnBorrow}")
  36. private boolean testOnBorrow;
  37. @Value("${spring.datasource.testOnReturn}")
  38. private boolean testOnReturn;
  39. @Value("${spring.datasource.poolPreparedStatements}")
  40. private boolean poolPreparedStatements;
  41. @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
  42. private int maxPoolPreparedStatementPerConnectionSize;
  43. @Value("${spring.datasource.filters}")
  44. private String filters;
  45. @Value("{spring.datasource.connectionProperties}")
  46. private String connectionProperties;
  47. @Bean //声明其为Bean实例
  48. @Primary //在同样的DataSource中,首先使用被标注的DataSource
  49. public DataSource dataSource() {
  50. DruidDataSource datasource = new DruidDataSource();
  51. datasource.setUrl(this.dbUrl);
  52. datasource.setUsername(username);
  53. datasource.setPassword(password);
  54. datasource.setDriverClassName(driverClassName);
  55. //configuration
  56. datasource.setInitialSize(initialSize);
  57. datasource.setMinIdle(minIdle);
  58. datasource.setMaxActive(maxActive);
  59. datasource.setMaxWait(maxWait);
  60. datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
  61. datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
  62. datasource.setValidationQuery(validationQuery);
  63. datasource.setTestWhileIdle(testWhileIdle);
  64. datasource.setTestOnBorrow(testOnBorrow);
  65. datasource.setTestOnReturn(testOnReturn);
  66. datasource.setPoolPreparedStatements(poolPreparedStatements);
  67. datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
  68. try {
  69. datasource.setFilters(filters);
  70. } catch (SQLException e) {
  71. e.printStackTrace();
  72. }
  73. datasource.setConnectionProperties(connectionProperties);
  74. return datasource;
  75. }
  76. }

然后程序就自动回使用Druid连接池啦。

结语

用springboot整合连接池的话真的很简单,模式都一样的,但是这里推荐使用Druid

 703

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2