提问者:小点点

无法在事务处理过程中更改事务只读属性


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

org.postgresql.util.PSQLException:无法在事务中间更改事务只读属性。位于org.postgresql.jdbc2.AbstractJdbc2Connection.setReadOnly(AbstractJdbc2 Connection.java:725),位于com.jolbox.bonecp.ConnectionHandle.setReadOnly(ConnectionHandle.java:1279),位于com.jolbox.bonecp.CConnectionHandle.(ConnectionHandle.java:254),位于.com.jolbbox.bonecp.ConnectionHandle.recreateConnectionHandle(Connectionhandl.java:273)位于org.springframework.jdbc.datasource.DataSourceUtils.doCloseConnection(DataSourceUtils.java:341)的org.springfframework.jdbc.datasource.DDataSourceUtils.doReleaseConnection(DataSourceUtils.java:228)位于org.sprindframework.jdb.core.JdbcTemplate.execute(JdbcTemplate.java:411)的org.springframework.JdbcTemplate.query(JdbcTemplate.java:456),位于org.springfframework.jdbc.core.JdbcTemplate.query(jdbcTemplatejava:464),位于org.springframework.jbc.core.jdbc Template.queryForObject(jdbc template.java:472)

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

我没有设置任何与事务相关的属性。所以事务设置应该是默认的。我该如何解决这个问题?

依赖关系和配置:

bonecp 0.8.0-rc1 postgresql 9.2-1002. jdbc4 spring-jdbc 3.2.1。发布

<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个答案

匿名用户

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

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

匿名用户

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

>

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

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

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