使用 Atomikos 减少 JTA 中的事务超时

问题描述 投票:0回答:1

我正在尝试使用 JTA + Atomikos 减少 300 秒的默认超时。但是,它不起作用,因为它一直需要 300 秒才能超时。

我想做的是:

  • UserTransaction
    :将超时设置为 10 秒。
  • UserTransactionManager
    :将超时设置为 10 秒。
UserTransactionImp userTransaction = new UserTransactionImp();

userTransaction.setTransactionTimeout(10);

// ...

UserTransactionManager transactionManager= new UserTransactionManager();
transactionManager.setTransactionTimeout(10); // may not be necessary as I do set this on the transaction

// ...

JtaTransactionManager jtaTransactionManager = new JtaTransactionManager(userTransaction,transactionManager);

// ...

TransactionTemplate templ = new TransactionTemplate(jtaTransactionManager, new DefaultTransaction());

templ.execute(callback -> {
  // code to update the DB
})

我如何测试这个:

  1. 通过 SQLDeveloper 锁定一行,
  2. 尝试通过应用程序更新同一行,
  3. 一直在等锁,
  4. 最终超时。

根据我上面所做的设置,我预计这会在 10 秒后超时。然而,它在超时之前一直等待 300 秒。

不确定我还需要在哪里配置它。

java transactions timeout jta atomikos
1个回答
0
投票

大多数 TransactionsEssentials JTA 设置可以使用

jta.properties
文件(放置在类路径的根目录中)或
transactions.properties
(也可以放置在您的主资源文件夹中)

感兴趣的配置是:

房源名称 说明 因为
com.atomikos.icatch.max_timeout
指定事务允许的最大超时时间(以毫秒为单位)。默认为 300000。这意味着调用 UserTransaction.setTransactionTimeout() 的值高于此处配置的值将被最大化到该值。对于 4.x 或更高版本,值 0 表示没有最大值(即允许无限超时)。注意:从 5.0 开始,使用 0 会干扰恢复。相反,使用 Long.MAX_VALUE 来指定无限制。 3.x, 4.x
com.atomikos.icatch.default_jta_timeout
JTA 事务的默认超时时间(可选,默认为 10000 毫秒) 3.4, 4.x

所以如果你配置你的

transactions.properties
文件:

# transactions.properties
# .../src/main/resources/transactions.properties
# Max timeout for any JTA transactions. (10 seconds)
com.atomikos.icatch.max_timeout=10000
# Default timeout for any JTA transactions. (5 seconds)
com.atomikos.icatch.default_jta_timeout=5000

最多允许 10 秒的时间。

参见:Atomikos - JtaProperties - 事务管理器

© www.soinside.com 2019 - 2024. All rights reserved.