无法在事务进行中更改事务只读属性

5
我正在使用BoneCP与Postgresql和Spring JdbcTemplate。当JdbcTemplate执行查询然后尝试关闭连接时,它会得到此异常:
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)下, 在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.springframework.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)
由于无法关闭连接,打开的连接数量达到最大连接数,导致应用程序无响应。
我没有设置任何与事务相关的属性。因此,事务设置应为默认设置。我该如何解决这个问题?
依赖项和配置:
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>
3个回答

3

1
我遇到了完全相同的问题,添加依赖项并没有解决这个问题。无论如何,从错误来看,问题似乎不是找不到它想要引用的类,而是关于连接池配置的一些问题。 - Salil

0

我遇到了同样的问题,并通过以下两个步骤解决了它:

  • 通过添加以下语句设置隔离级别: config.setDefaultTransactionIsolation("READ UNCOMMITTED");

  • 在关闭之前提交每个事务。

我不确定哪一个解决了问题或两者都是必要的。


设置READ UNCOMMITTED听起来不是一个好主意——因为当您读取其他事务正在写入的数据时,您可能会得到相当随机的结果,甚至可能会被回滚。也许在您的特定情况下它可以工作,但我不建议一般情况下使用它。或者至少警告人们它的作用。 - KajMagnus

0

将BoneCP版本更改为0.8.0.RELEASE可以解决此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接