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

4smxwvx5  于 2023-05-21  发布在  Spring
关注(0)|答案(3)|浏览(127)

我正在使用BoneCP与PostgreSQL和Spring JdbcTemplate。当JdbcTemplate执行query并试图关闭连接时,它会得到以下异常:
org.postgresql.util.PSQLException:无法在事务进行中间更改事务只读属性。网址:http://www.jdbc2.abstractJdbc2Connection.setReadOnly(AbstractJdbc2Connection.java:725)at com. jolbox波内普ConnectionHandle。在com.jolbox.bonecp.ConnectionHandle中设置ReadOnly(ConnectionHandle.java:1279)。(ConnectionHandle.java:254)在com. jolbox。bonecp。ConnectionHandle。recreateConnectionHandle(ConnectionHandle.java:273)at com. jolbox。bonecp。ConnectionHandle。close(ConnectionHandle.java:476)at org. SpringFramework jdbc数据源DataSourceUtils。org上的doCloseConnection(DataSourceUtils.java:341)。SpringFramework jdbc数据源DataSourceUtils。doReleaseConnection(DataSourceUtils.java:328)at org. SpringFramework jdbc数据源DataSourceUtils。releaseConnection(DataSourceUtils.java:294)at org. SpringFramework jdbc核心JdbcTemplate. execute(JdbcTemplate.java:411)at org. SpringFramework jdbc核心JdbcTemplate. query(JdbcTemplate.java:456)at org. SpringFramework jdbc核心JdbcTemplate. query(JdbcTemplate.java:464)at org. SpringFramework jdbc核心JdbcTemplate. org上的queryForObject(JdbcTemplate.java:472)。SpringFramework jdbc核心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>
muk1a3rh

muk1a3rh1#

我今天遇到了这个问题。您可能缺少boneCP的某个必需依赖项。
我错过了SLF4J库,并收到相同的消息。检查您是否有依赖项:http://jolbox.com/index.html?page=http://jolbox.com/requirements.html

fcg9iug3

fcg9iug32#

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

  • 通过添加以下语句设置隔离级别:System. out. println(“println”);
  • 在关闭之前提交每个事务。

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

sbdsn5lh

sbdsn5lh3#

将BoneCP版本更改为0.8.0.RELEASE解决了该问题。

相关问题