gpt4 book ai didi

jta - 将 jta 事务超时从默认更改为自定义

转载 作者:行者123 更新时间:2023-12-04 22:38:17 28 4
gpt4 key购买 nike

我正在使用 Atomikos 进行 JTA 事务。
我对 JTA 有以下设置:

UserTransactionImp userTransactionImp = new UserTransactionImp();
userTransactionImp.setTransactionTimeout(900);

但是当我的代码执行 JTA 事务时,如果它需要超过 5 分钟(这是默认值),那么它会抛出异常:
Caused by: com.atomikos.icatch.RollbackException: Prepare: NO vote
at com.atomikos.icatch.imp.ActiveStateHandler.prepare(ActiveStateHandler.java:231)
at com.atomikos.icatch.imp.CoordinatorImp.prepare(CoordinatorImp.java:681)
at com.atomikos.icatch.imp.CoordinatorImp.terminate(CoordinatorImp.java:970)
at com.atomikos.icatch.imp.CompositeTerminatorImp.commit(CompositeTerminatorImp.java:82)
at com.atomikos.icatch.imp.CompositeTransactionImp.commit(CompositeTransactionImp.java:336)
at com.atomikos.icatch.jta.TransactionImp.commit(TransactionImp.java:190)
... 25 common frames omitted

看起来它采用了默认的 jta 事务超时(即使我明确地设置了超时(到 15 分钟/900 秒)。

我尝试在 application.properties 文件中使用以下属性,但它仍然采用默认超时值(300 秒)。
spring.jta.atomikos.properties.max-timeout=600000
spring.jta.atomikos.properties.default-jta-timeout=10000

我也尝试过以下属性,但没有运气:
spring.transaction.default-timeout=900

任何人都可以建议我是否需要任何其他设置?我正在使用 wildfly 插件、spring boot 和 atomikos api 进行 JTA 事务。

最佳答案

来自 Atomikos documentation :

com.atomikos.icatch.max_timeout

Specifies the maximum timeout (in milliseconds) that can be allowed for transactions. Defaults to 300000. This means that calls to UserTransaction.setTransactionTimeout() with a value higher than configured here will be max'ed to this value. For 4.x or higher, a value of 0 means no maximum (i.e., unlimited timeouts are allowed).



实际上,如果您查看 Atomikos 库源代码(适用于 4.0.0M4 和 3.7.0 版本),在 createCC 中类中的方法 com.atomikos.icatch.imp.TransactionServiceImp你会看见:

387:   if ( timeout > maxTimeout_ ) {
388: timeout = maxTimeout_;
389: //FIXED 20188
390: LOGGER.logWarning ( "Attempt to create a transaction with a timeout that exceeds maximum - truncating to: " + maxTimeout_ );
391: }

因此,任何指定更长事务超时的尝试都会被限制为 maxTimeout_如果未指定,则在初始化期间设置默认值 300000。

您可以设置 com.atomikos.icatch.max_timeout作为 JVM 参数:
-Dcom.atomikos.icatch.max_timeout=900000
或者你可以使用 The Advanced Case Atomikos 文档中的 Spring 配置部分中指定的配方。

关于jta - 将 jta 事务超时从默认更改为自定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45282120/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com