无法在事务中间更改事务只读属性 [英] Cannot change transaction read-only property in the middle of a transaction

查看:278
本文介绍了无法在事务中间更改事务只读属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将BoneCP与Postgresql和Spring JdbcTemplate一起使用。当JdbcTemplate执行查询然后尝试关闭连接时,它会收到以下异常:

I am using BoneCP with Postgresql and Spring JdbcTemplate. When JdbcTemplate executes query and then tries to close the connection, it gets this exception:


org.postgresql.util.PSQLException:无法更改事务交易中间的只读
属性。在
org.postgresql.jdbc2.AbstractJdbc2Connection.setReadOnly(AbstractJdbc2Connection.java:725)

com.jolbox.bonecp.ConnectionHandle.setReadOnly(ConnectionHandle.java:1279)

com.jolbox.bonecp.ConnectionHandle。(ConnectionHandle.java:254)

com.jolbox.bonecp.ConnectionHandle.recreateConnectionHandle(ConnectionHandle.java:273)

com.jolbox.bonecp.ConnectionHandle.close(ConnectionHandle.java:476)

org.springframework.jdbc.datasource.DataSourceUtils.doCloseConnection(DataSourceUtils.java:341)

org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:328)
at
org.springframework.jdbc.datasource.DataSourceUtils.releaseConnection(DataSourceUtils.java:294)

org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:411)

org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:456 )

org.spr ingframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:464)

org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:472)

org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:477)

org.postgresql.util.PSQLException: Cannot change transaction read-only property in the middle of a transaction. at org.postgresql.jdbc2.AbstractJdbc2Connection.setReadOnly(AbstractJdbc2Connection.java:725) at com.jolbox.bonecp.ConnectionHandle.setReadOnly(ConnectionHandle.java:1279) at com.jolbox.bonecp.ConnectionHandle.(ConnectionHandle.java:254) at com.jolbox.bonecp.ConnectionHandle.recreateConnectionHandle(ConnectionHandle.java:273) at com.jolbox.bonecp.ConnectionHandle.close(ConnectionHandle.java:476) at org.springframework.jdbc.datasource.DataSourceUtils.doCloseConnection(DataSourceUtils.java:341) at org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:328) at org.springframework.jdbc.datasource.DataSourceUtils.releaseConnection(DataSourceUtils.java:294) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:411) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:456) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:464) at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:472) at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:477)

由于无法关闭连接,打开的连接数达到最大连接数,然后应用程序变得无响应。

Since it can't close connections, open connections reaches to max connection number, then app become unresponsive.

我未设置任何与交易相关的属性。因此,交易设置应为默认设置。我该如何解决?

I am not setting any transaction related properties. So transaction settings should be default. How can I fix this?

依赖性和配置:

bonecp 0.8.0-rc1
PostgreSQL 9.2-1002.jdbc4
spring-jdbc 3.2.1.RELEASE

bonecp 0.8.0-rc1 postgresql 9.2-1002.jdbc4 spring-jdbc 3.2.1.RELEASE

<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"        destroy-method="close">         <property name="driverClass" value="org.postgresql.Driver" />       <property name="jdbcUrl" value="jdbc:postgresql://127.0.0.1/mkayman" />         <property name="username" value="mkayman" />        <property name="password" value="" />       <property name="idleConnectionTestPeriodInMinutes" value="5" />         <property name="idleMaxAgeInMinutes" value="30" />      <property name="maxConnectionsPerPartition" value="5" />        <property name="minConnectionsPerPartition" value="2" />        <property name="partitionCount" value="2" />        <property name="acquireIncrement" value="1" />      <property name="statementsCacheSize" value="100" />     </bean>


推荐答案

我今天遇到了这个问题。您可能会缺少boneCP所需的依赖项之一。

I ran into this issue today. You might be missing one of the required dependencies of boneCP.

我缺少SLF4J库,并且收到了相同的消息。在此处检查是否具有依赖项: http:// jolbox .com / index.html?page = http://jolbox.com/requirements.html

I was missing SLF4J library, and receiving the same message. Check whether you have the dependencies here: http://jolbox.com/index.html?page=http://jolbox.com/requirements.html

这篇关于无法在事务中间更改事务只读属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆