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

时间:2013-03-13 22:35:31

标签: spring postgresql spring-jdbc bonecp

我正在使用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>

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

  • 在结束前提交每笔交易。

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