【发布时间】:2015-02-13 17:01:03
【问题描述】:
我在交易方面遇到了一些问题。我没有使用 JTA。
有可能我已经在一个事务中开始一个新事务,最终导致这个异常:
java.lang.Thread.run(Thread.java:745)
org.postgresql.util.PSQLException: The connection attempt failed.
org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:233)
org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:144)
org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29)
org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21)
org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31)
java.lang.Thread.run(Thread.java:745)
java.net.NoRouteToHostException: Cannot assign requested address
java.net.PlainSocketImpl.socketConnect(Native Method)
java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
java.net.Socket.connect(Socket.java:589)
org.postgresql.core.PGStream.<init>(PGStream.java:61)
org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:109)
org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:144)
org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29)
org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21)
org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31)
org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
org.postgresql.Driver.makeConnection(Driver.java:410)
org.postgresql.Driver.connect(Driver.java:280)
java.sql.DriverManager.getConnection(DriverManager.java:664)
java.sql.DriverManager.getConnection(DriverManager.java:208)
我在这里读到,当不使用 JTA 时,它挂起并创建新事务的方式是通过创建新连接,可能解释了上面的异常。
How does transaction suspension work in Spring?
我的代码应该在创建新事务之前创建并提交事务,但是 我不确定。
我有 8 个线程填充数据,循环中的每个线程创建一个新事务,一遍又一遍地工作、提交。
我如何才能确定我是否处于交易的“嵌套”模式?
TransactionSynchronizationManager 仅提供当前事务是否存在的信息,而不是在同一线程下挂起多少个事务来确定这里是否存在问题。
如果可能的话,我还想知道有多少当前事务在全球范围内进行,跨所有线程。
【问题讨论】:
标签: java spring hibernate spring-mvc annotations