2013-03-13 90 views
3

我正在使用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) at 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 弹簧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

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

我错过了SLF4J库,并收到相同的消息。检查是否有依赖关系在这里:http://jolbox.com/index.html?page=http://jolbox.com/requirements.html

+0

我遇到了完全相同的问题,并添加依赖项没有解决此问题。无论如何,从错误中,问题看起来并不是它找不到想要引用的类,而是关于连接池配置。 – Salil 2013-05-25 13:59:27

0

我遇到了同样的问题,并能够通过做这两个步骤来解决这个问题:

  • 加入这些语句设置隔离级别: 配置。 setDefaultTransactionIsolation(“READ UNCOMMITTED”);

  • 在关闭前确认每笔交易。

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

+0

设置'READ UNCOMMITTED'听起来不是个好主意 - 因为当你读取其他事务正在写入的数据时,你可能会得到相当随机的结果,或许它甚至会被回滚。也许它适合你的情况,但我不会推荐它。或者至少警告人们它做了什么 – KajMagnus 2016-02-14 00:54:28