最近查看生产服务器的日志,看到有些错误信息出现的比较多:摘取错误片段信息
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: 移除超时连接
分享到:
相关推荐
javaJNDI连接数据库
此资源系本人在培训机构的资料,内有jndi数据库连接池的详细讲解资料个代码实例及监听器的代码实例和讲解资料!希望对象大家有所帮助
weblogic连接池配置数据库断掉重连的问题
一个jndi数据库查询例子 用的是MyEclipse开发的 大家随便看看如果又需要就下来看看
tomcat jndi 数据库配置方法
jndi对数据库操作 数据源对数据库操作 最简单的java
在tomcat6.0和MySQL5的环境下能运行成功,内含详细的说明和需要用到的文件,不能运行的话加QQ:459789479
技术分享:DBCP、C3P0、JNDI数据库连接对比
jndi连接数据库.rar
JNDI连接数据库配置,Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) envCtx.lookup("jdbc/DevDB"); Connection conn = ...
基于JNDI的应用程序开发 在以TOMCAT为WEB服务器的项目中,用JNDI建立数据库连接池实例.
tomcat6.0JNDI连接数据库 中配置代码
c3p0连接数据库及jndi链接例子,简单易学
java_数据库连接池_c3p0_使用及参数详解_支持重连
使用JNDI 连接数据库的三种示例,我已经在代码里标注,使用 MyEclipse 导入即可。欢迎下载我的更多资源。
kettler连接oracle 12c数据库(目前只能用JNDI)
JNDI数据库访问,txt文档的形式,需要的可以下载
JNDI 连接数据库
简单的数据库连接池,jndi连接,封装成集合
Tomcat通过JNDI方式连接SqlServer数据库 开发JSP详解