mysql c3p0 释放连接池_mysql – 如何阻止c3p0连接池隐藏连接异常的原因?
时间: 2023-08-11 11:44:04 浏览: 150
在使用c3p0连接池时,如果连接异常被隐藏了,可能是因为c3p0默认会尝试重新连接数据库。如果重试成功,则异常会被清除,不会被抛出。如果你想要看到连接异常的原因,可以通过设置c3p0的配置参数,禁止重试,让异常能够被抛出。
具体来说,可以在c3p0的配置文件中设置以下参数:
```
c3p0.testConnectionOnCheckout=true
c3p0.preferredTestQuery=SELECT 1
c3p0.testConnectionOnCheckin=false
c3p0.acquireRetryAttempts=0
c3p0.acquireRetryDelay=1000
```
其中,`c3p0.testConnectionOnCheckout=true`表示在从连接池中取出连接时,执行一次测试连接的操作。如果连接异常,会被抛出。`c3p0.preferredTestQuery=SELECT 1`表示测试连接时执行的SQL语句。`c3p0.testConnectionOnCheckin=false`表示在将连接放回连接池时,不再进行测试连接的操作。`c3p0.acquireRetryAttempts=0`表示禁止重试连接的次数。`c3p0.acquireRetryDelay=1000`表示重试连接的时间间隔为1秒。
通过设置以上参数,就可以禁止c3p0连接池隐藏连接异常的原因。
相关问题
javaweb mysql 连接池 c3p0 配置_【JavaWeb】c3p0连接池与MySQL
首先,需要在项目中导入c3p0相关的jar包,可以在maven中添加以下依赖:
```xml
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
```
然后,在项目中创建一个c3p0配置文件,例如命名为c3p0-config.xml,内容如下:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!--初始化连接池时,连接池中连接的个数-->
<initialPoolSize>3</initialPoolSize>
<!--连接池最多保存的连接数-->
<maxPoolSize>10</maxPoolSize>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数-->
<acquireIncrement>3</acquireIncrement>
<!--连接超时时间-->
<checkoutTimeout>60000</checkoutTimeout>
<!--当连接池中连接空闲时间大于idleConnectionTestPeriod所指定的时间时,c3p0则会测试连接池中的连接有效性。-->
<idleConnectionTestPeriod>60</idleConnectionTestPeriod>
<!--如果设为true那么在取得连接的同时将校验连接的有效性。建议使用idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的可靠性。-->
<testConnectionOnCheckin>false</testConnectionOnCheckin>
<!--如果设为true那么在归还连接的同时将校验连接的有效性。建议使用idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的可靠性。-->
<testConnectionOnCheckout>false</testConnectionOnCheckout>
<!--自动提交-->
<autoCommitOnClose>true</autoCommitOnClose>
<!--打印连接详细信息-->
<debug>true</debug>
<!--MySQL数据库的驱动程序-->
<driverClass>com.mysql.jdbc.Driver</driverClass>
<!--连接的URL-->
<jdbcUrl>jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false</jdbcUrl>
<!--用户名-->
<user>root</user>
<!--密码-->
<password>123456</password>
<!--定义了一个标准的数据库查询语句,用来测试连接池中连接的可用性,如果执行失败,则抛出SQLException异常,表示该连接已经不可用了。-->
<preferredTestQuery>select 1</preferredTestQuery>
</c3p0-config>
```
其中,需要根据实际情况修改jdbcUrl、user和password等参数。
最后,在Java代码中使用c3p0连接池,示例代码如下:
```java
public class DBUtil {
//定义一个C3P0数据源
private static ComboPooledDataSource ds = new ComboPooledDataSource("mysql");
/**
* 获取连接对象
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
/**
* 关闭连接对象、Statement对象和ResultSet对象
*/
public static void close(Connection conn, Statement stmt, ResultSet rs) {
try {
if(rs != null) {
rs.close();
}
if(stmt != null) {
stmt.close();
}
if(conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
在具体使用时,可以通过DBUtil.getConnection()方法获取连接对象,并通过DBUtil.close()方法关闭连接对象、Statement对象和ResultSet对象。
c3p0数据库连接池连接MySQL数据库
C3P0是一个流行的Java数据库连接池管理器,它可以帮助你有效地管理和复用数据库连接,避免频繁创建和关闭连接所带来的性能开销。当你使用C3P0与MySQL数据库集成时,你需要进行以下几个步骤:
1. **添加依赖**:在你的项目中,首先需要将C3P0库作为Maven或Gradle的依赖添加到构建文件中。
```xml
<!-- Maven -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version> <!-- 选择合适的版本 -->
</dependency>
// Gradle
implementation 'com.mchange:c3p0:0.9.5.2'
```
2. **配置初始化**:在应用启动时,需要初始化C3P0连接池。通常会在Spring Boot应用中使用`DataSource`接口的配置。
```java
@Configuration
public class DataSourceConfig {
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.user}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource() {
c3p0.ComboPooledDataSource dataSource = new c3p0.ComboPooledDataSource();
dataSource.setJdbcUrl(url);
dataSource.setUser(username);
dataSource.setPassword(password);
dataSource.setMaxPoolSize(10); // 设置最大连接数
dataSource.setMinPoolSize(5); // 设置最小连接数
dataSource.setMaxIdleTime(300); // 设置最长空闲时间
return dataSource;
}
}
```
3. **注入使用**:在需要使用数据库的地方,你可以通过`@Autowired`注入`DataSource`来获取连接。
```java
@Service
public class MyService {
@Autowired
private DataSource dataSource;
public void performTask() {
try (Connection connection = dataSource.getConnection()) {
// 这里进行数据库操作
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
阅读全文
相关推荐















