最近查看生产服务器的日志,看到有些错误信息出现的比较多:摘取错误片段信息
java.sql.SQLRecoverableException: 无法从套接字读取更多的数据
org.hibernate.TransactionException: unable to rollback against JDBC connection
org.hibernate.TransactionException: rollback failed
org.springframework.transaction.TransactionSystemException: Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: rollback failed
初步判断是 应用与数据库服务器之间的连接由于某种原因断开连接 导致。
然后在本地来重现生产错误,确定是 web应用与数据库断开连接后,出现上述错误。
我们的web应用数据库用的是 JNDI 配置,之前的配置较简单,缺少自动重连的配置
<Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver" maxActive="100" maxIdle="3" name="jdbc/cpnDs" password="cpn" type="javax.sql.DataSource" url="jdbc:oracle:thin:@192.168.0.1:1521:oradb" username="cpn" />
查找JNDI相关资料,加上了相关配置,测试后通过:
<Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver" maxActive="100" maxIdle="3" name="jdbc/cpnDs" password="cpn" type="javax.sql.DataSource" url="jdbc:oracle:thin:@192.168.0.1:1521:oradb" username="cpn" validationQuery="SELECT 1 FROM SYS.DUAL" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
testOnReturn="true" testWhileIdle="true"/>
JNDI常见配置属性描述:
name:JDBC数据源的名称
auth:认证方式,一般设置为Container,还有一种是Application
type:当前配置资源的类别
factory:数据源工厂,默认为”org.apache.commons.dbcp.BasicDataSourceFactory”
driverClassName:驱动的全路径类名
url:JDBC驱动的连接字符串
username:访问数据库的用户名
password:访问数据库的密码
maxActive:当前数据源支持的最大并发数
maxIdle:连接池中保留最大数目的闲置连接数
maxWait:当连接池中无连接时的最大等待毫秒数,在等当前设置时间过后还无连接则抛出异常
testWhileIdle:
关注的重点,GenericObjectPool中针对pool管理,起了一个 异步Evict的TimerTask定时线程进行控制 ( 可通过设置参数 timeBetweenEvictionRunsMillis>0), 定时对线程池中的链接进行validateObject校验,对无效的链接进行关闭后,会调用ensureMinIdle,适当建立链接保证最小的minIdle连接数。
validationQuery:在返回应用之前,用于校验当前连接是否有效的SQL语句,如果指定了,当前查询语句至少要返回一条记录
testOnReturn: 就是在进行returnObject对返回的connection进行validateObject校验,个人觉得对数据库连接池的管理意义不大
removeAbandoned: 移除超时连接
分享到:
相关推荐
本文将详细介绍如何在Tomcat6中配置连接池,并实现数据库连接的自动重连功能。 #### 二、Tomcat6连接池配置 **1. 修改`conf/server.xml`文件** 在Tomcat6中配置连接池的第一步是修改`conf/server.xml`文件,增加...
在 Weblogic 中,连接池配置数据库断掉重连机制是指当连接池中的连接断掉时,Weblogic 会自动重新连接到数据库,以便恢复连接池的可用性。 断掉重连机制的原理是基于 Weblogic 的连接池配置机制。当连接池中的连接...
以下是使用C3P0解决数据库断开频繁的一些关键步骤和配置项: 1. **引入C3P0依赖**:在项目中添加C3P0的jar包依赖,确保能正常引用C3P0的相关类。 2. **创建数据源配置**:在Tomcat的`context.xml`或应用的`web.xml...
当应用程序需要与数据库交互时,会从连接池中获取一个已经建立好的连接,使用完毕后归还到池中,而不是每次操作都新建和关闭连接,这显著减少了数据库连接的创建和销毁开销。 2. 自动回收与检测:BoneCP会定期检查...
在完成数据库操作后,记得关闭打开的资源,如`Connection`、`Statement`和`ResultSet`,以释放数据库资源。使用`try-with-resources`语句可以自动关闭这些资源。 ```java try (Connection conn = DriverManager.get...
数据库连接池的基本工作原理是:当应用程序需要访问数据库时,首先从连接池中获取一个已经建立好的连接,使用完毕后,不是立即关闭连接,而是将其归还给连接池,以便其他请求再次使用。这样避免了频繁地打开和关闭...
- 如果连接频繁断开,可能是`maxIdleTime`设置过短,或者数据库服务器出现问题,需调整配置或排查数据库。 总结,c3p0数据库连接池是一个实用且功能丰富的工具,适用于各种Java应用。理解并掌握c3p0的配置和使用,...
数据库连接池是一种管理数据库连接的机制,它预先创建并维护一定数量的数据库连接,当应用需要时,从池中获取一个连接,使用完毕后归还,而不是直接关闭。这样可以避免频繁地创建和销毁连接,提高性能。常见的Java...
当数据库连接因网络问题或其他原因断开时,`c3p0`会尝试自动重连。通过配置`testConnectionOnCheckout`和`testConnectionOnCheckin`属性,可以在获取和归还连接时进行健康检查,如果发现连接异常,会尝试关闭并重新...
- 自动检测并修复数据库连接:C3P0会定期检查数据库连接的有效性,如果发现连接已断开,会自动尝试重连。 - 连接池配置灵活:可以设置初始连接数、最大连接数、最小连接数、空闲超时时间等参数,以适应不同的应用...
MySQL默认的会话超时时间是8小时,超过这个时间未使用的连接会被自动断开。对于长时间运行的应用,这可能导致连接失效,进而影响应用程序的稳定性。通过使用Proxool,我们可以设置连接的生命周期,确保即使超过了...
1. C3P0:一个开源的JDBC连接池,提供了很多高级特性,如自动检测死连接、支持JNDI绑定等。 2. DBCP (Apache BasicDataSource):Apache的一个基础数据库连接池,相对简单,适合小型项目。 3. HikariCP:当前广泛使用...
此外,C3P0还提供了连接的健康检查和自动回收机制,当检测到连接已断开时,会自动重新建立连接,保证了应用程序的稳定性。 在实际开发中,你可能还需要关注C3P0的监控和日志配置。C3P0提供了丰富的监控指标,如连接...
autoReconnect=true`,其中`localhost`是服务器地址,`3306`是MySQL的默认端口,`bbs`是数据库名,`autoReconnect=true`确保在连接断开后能自动重连。 3. `username`和`password`:数据库的用户名和密码,这里设置为...
- C3P0特性:C3P0提供自动检测、测试、断开和恢复连接的功能,确保连接的稳定性和效率。此外,它支持多线程环境,具有良好的扩展性。 2. **C3P0配置** - 配置文件:C3P0通常通过配置文件(如c3p0.properties)来...
2. **自动检测与恢复**:C3P0提供了自动检测和回收失效连接的功能,如果发现连接已断开,会尝试重新建立连接,确保应用程序始终能获得有效的数据库连接。 3. **连接池配置**:用户可以根据实际需求配置连接池参数,...
**JDBC 3.0 数据库编程:深入理解与实践** 在Java开发中,JDBC(Java Database Connectivity)是连接Java应用程序与各种数据库的关键技术。JDBC 3.0是JDBC规范的一个重要版本,它引入了许多改进和新特性,提高了...
3. **自动重连**:如果数据库连接意外断开,c3p0会尝试自动重新建立连接,保障应用程序的连续运行。 4. **多线程支持**:c3p0支持多线程环境下的并发连接管理,确保每个线程都能获得独立的数据库连接。 5. **性能...
4. 断线重连:当数据库连接因网络或其他原因断开时,C3P0会尝试自动重新建立连接,保证应用的连续性。 5. 原生支持JNDI:C3P0可以通过JNDI服务来注册和查找连接池,方便在企业级应用服务器中部署和管理。 6. 可...
它提供了数据库连接的自动管理,包括连接的创建、分配、回收和断开,有效地避免了数据库连接资源的浪费。C3P0通过组合(Combining)和池化(Pooling)策略来优化数据库连接的使用,提高了应用的并发性能。 在使用C3...