Spring Boot 整合 C3P0 數據庫連接池
本示例使用 C3P0 + DbUtils + SQLServer 進行整合來操作數據庫。
配置 C3P0 信息
- application.properties
# SQLServer 數據庫配置信息
c3p0.jdbcUrl=jdbc:sqlserver://localhost:1433;DatabaseName=game
c3p0.user=gm
c3p0.password=root
c3p0.driverClass=com.microsoft.sqlserver.jdbc.SQLServerDriver
c3p0.minPoolSize=2
c3p0.maxPoolSize=10
c3p0.maxIdleTime=30
c3p0.checkoutTimeout=30000
c3p0.acquireIncrement=3
c3p0.maxStatements=1000
c3p0.initialPoolSize=3
c3p0.idleConnectionTestPeriod=60
c3p0.acquireRetryAttempts=30
c3p0.acquireRetryDelay=1000
c3p0.breakOnAcquireFailure=true
c3p0.breakAfterAcquireFailure=false
c3p0.testConnectionOnCheckout=false
引入 C3P0 和 SQLServer 依賴
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.0.0.jre8</version>
</dependency>
<!-- 引入 dbutils 依賴操作數據庫 -->
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.6</version>
</dependency>
創建 C3P0 配置類
@Configuration
public class C3p0Configuration {
@Bean(name = "dataSource")
@Primary // 用 @Primary 區分主數據源
@ConfigurationProperties(prefix = "c3p0") // 指定配置文件中,前綴爲 c3p0 的屬性值
public DataSource dataSource(){
return DataSourceBuilder.create()
.type(ComboPooledDataSource.class).build();
}
}
創建 QueryRunner 對象
QueryRunner 中提供了對 SQL 語句操作的 API,不用我們手動寫操作數據庫的代碼,同時也無需編寫任何清理或資源泄漏防護代碼。
@Configuration
public class QueryRunnerConfiguration {
@Autowired
private DataSource dataSource;
@Bean(name = "queryRunner")
public QueryRunner queryRunner(){
// 使用 SQlServer 數據庫時,pmdKnownBroken 要設置爲 true,否則在預編譯時的參數無法自動傳入
return new QueryRunner(dataSource,true);
}
}
注意
在使用 DbUtils 組件進行數據庫操作時,如果是操作 SQLServer 數據庫,在構建 QueryRunner 對象時,pmdKnownBroken 要設置爲 true,否則在預編譯時的參數無法自動傳入。
new QueryRunner(dataSource,true);
後記
由於自身能力有限,若有錯誤或者不當之處,還請大家批評指正,一起學習交流!
GitHub 源碼地址:springboot-c3p0