环境:weblogic 双机集群环境 使用技术: SSH 框架,Proxool 连接池,使用包版本(proxool-0.9.0RC2.jar) 问题:一段时间没操作项目,就会出现连接断开的情况,报如下错误:
org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could n
ot inspect JDBC autocommit mode; uncategorized SQLException for SQL [???]; SQL s
tate [null]; error code [0]; Couldn't perform the operation getAutoCommit: You c
an't perform any operations on this connection. It has been automatically closed
by Proxool for some reason (see logs).; nested exception is java.sql.SQLExcepti
on: Couldn't perform the operation getAutoCommit: You can't perform any operatio
ns on this connection. It has been automatically closed by Proxool for some reas
on (see logs).
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.trans
late(SQLStateSQLExceptionTranslator.java:97)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.t
ranslate(SQLErrorCodeSQLExceptionTranslator.java:258)
at org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAcces
sException(HibernateAccessor.java:424)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernate
AccessException(HibernateAccessor.java:411)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(Hibernat
eTemplate.java:371)
Truncated. see log file for complete stacktrace
java.sql.SQLException: Couldn't perform the operation getAutoCommit: You can't p
erform any operations on this connection. It has been automatically closed by Pr
oxool for some reason (see logs).
at org.logicalcobwebs.proxool.WrappedConnection.invoke(WrappedConnection
.java:207)
at org.logicalcobwebs.proxool.WrappedConnection.intercept(WrappedConnect
ion.java:87)
at oracle.jdbc.internal.OracleConnection$$EnhancerByCGLIB$$3aeeeeaa.getA
utoCommit(<generated>)
at org.hibernate.jdbc.ConnectionManager.isAutoCommit(ConnectionManager.j
ava:189)
at org.hibernate.jdbc.JDBCContext.afterNontransactionalQuery(JDBCContext
.java:239)
Truncated. see log file for complete stacktrace
>
ERROR [HouseKeeper] (ProxyConnection.java:194) - #0012 encountered errors during
destruction:
java.sql.SQLException: Io 异常: Connection reset
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java
:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java
:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java
:255)
at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:480)
at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:1
184)
at org.logicalcobwebs.proxool.ProxyConnection.reallyClose(ProxyConnectio
n.java:192)
at org.logicalcobwebs.proxool.ConnectionPool.removeProxyConnection(Conne
ctionPool.java:429)
at org.logicalcobwebs.proxool.ConnectionPool.expireProxyConnection(Conne
ctionPool.java:462)
at org.logicalcobwebs.proxool.HouseKeeper.sweep(HouseKeeper.java:106)
at org.logicalcobwebs.proxool.HouseKeeperThread.run(HouseKeeperThread.ja
va:39)
XML 配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "dtd/spring-beans-2.0.dtd"><beans> <bean id="dataSource1"
class="com.hdkjframe.base.env.ProxoolDataSourceExt">
<property name="driver">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="driverUrl">
<value>jdbc:oracle:thin:@x.x.x.x:1521:x</value>
</property>
<property name="user">
<value>xxxx</value>
</property>
<property name="password">
<value>xxxx</value>
</property>
<property name="delegateProperties">
<value>user=xxxx,password=xxxx</value>
</property>
<property name="alias">
<value>xxxx</value>
</property>
<property name="maximumConnectionCount">
<value>200</value>
</property>
<property name="minimumConnectionCount">
<value>0</value>
</property>
<property name="houseKeepingSleepTime">
<value>30000</value>
</property>
<property name="trace">
<value>true</value>
</property>
<property name="verbose">
<value>true</value>
</property>
<property name="statistics">
<value>1m,15m,1d</value>
</property>
</bean> <bean id="sessionFactory1"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource1" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.OracleDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
</props>
</property>
</bean>
</beans>
总结: 网上搜狗了一翻, 大概说的是没有设置最小连接数吧, 我在 xml 里面配置
<property name="prototypeCount">
<value>5</value>
</property> 也没有用, 忘哥哥姐姐们帮下忙, O(∩_∩)O谢谢
解决方案 »
- struts2的select标签的问题
- 请问ATM的界面是 网页 还是 Swing 的啊?
- 如何用SSH实现仿SongTaste网站
- 跪求高手指点:ssh jsp调用struts2的action是老出奇怪问题,我的action是有spring管理的。
- 怎么有的mysql 不支持事务啊,那样的会不是会出大问题吗
- 关于跟踪的问题。高手请看内容
- 做个查询功能,但网页无法向JAVA ACtion 传递中文,怎么处理?
- 无法调度到请求的页: 异常错误:java.lang.RuntimeException
- 大家有谁调试过《jsp web 编程指南》这本书中的最后一个例子没有,是一个关于旅游景点的那个,我有源文件,可是调试不通
- 100分求购JAVA 2实用教程 这本电子书 分不够可再加
- 关于CA认证的问题
- QQ校友历史访问记录
at org.logicalcobwebs.proxool.ConnectionPool.removeProxyConnection
at org.logicalcobwebs.proxool.ConnectionPool.expireProxyConnection
2,由于连接已经被重置,所以,could not inspect JDBC autocommit mode
java.sql.SQLException: Io 异常: Connection reset希望对你有帮助。
问题补充下: 我在 tomcat 和单机 weblogic 环境下一样的代码都没错, 移植到双机 weblogic下就报错了。
<value>0</value>
</property>
value 设置成大于0的数试试
<proxool:maximum-active-time>value</proxool:maximum-active-time>
试试
spring直接配置用
<property name="maximumActiveTime">
<value>value</value>
</property>
加入sett方法setMaximumActiveTime注入org.logicalcobwebs.proxool.ProxoolDataSource
试试看行否
默认5分钟
调整后再试试
如果是这样,说明你的配置本身就有问题
可以使用单独的proxool配置文件来试一下
我也觉得是环境的问题, 是双机weblogic集群, 双机oracle 服务器, F5 代理。
不是用的 c3p0 用的是 proxool-0.9.0RC2.jar 包
解决方案目前俺们也在想呢。
<value>1m,15m,1d</value>
</property>
这样写对的么
<value>200</value>
</property>
<property name="minimumConnectionCount">
<value>0</value>
</property>
这里才是设置最大和最小连接数的地方吧
最小连接数为零
那么这个连接池还有什么性能,大于最小连接数的连接,超时后会自动关闭的。
你说设置成大于零会报错,请看看是什么错,大于零时正确的配置
没出问题说明测试的连接数太少,不够造成问题。
首先,出现IO connection问题,很明显,数据库已经开不了连接。
为什么会这样呢,肯定是开启的连接数过大,且本次访问(指出问题时的操作)
用的不是连接池内的连接,而是去重新开数据库的连接,才会报io错误。
很可能是如下原因造成的:
最小连接数设置太小(貌似你的是零),比如数据库只能支持200个连接
然后你操作时一下子开启了180,当然这180是放在连接池内的
短时间内不会被关闭,有个超时时间(假设20分钟),过了超时时间后,连接池会关闭
大于最小连接数的一部分连接,而这些刚关闭的连接短时间内是不能再开启的(数据库连接不能频繁开关,需要一段时间释放资源,这点很重要),
而恰巧这时候你又来访问程序,需要180个数据库连接,由于连接池里的连接被刚关闭,于是又要重新去数据库里请求,这时候不巧,大部分连接处在(释放资源阶段),于是出现Io connection异常
testConnectionOnCheckout="false"
autoCommitOnClose="true"
maxIdleTime="180"
idleConnectionTestPeriod="180"不知道,能不能在配置文件里,配置这些属性,目的,自动连接连接池。不占用连接数。防止连接池超时。
LZ看看是否可以帮助你。