我正在尝试使用 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
})
我如何测试这个:
根据我上面所做的设置,我预计这会在 10 秒后超时。然而,它在超时之前一直等待 300 秒。
不确定我还需要在哪里配置它。
大多数 TransactionsEssentials JTA 设置可以使用
jta.properties
文件(放置在类路径的根目录中)或 transactions.properties
(也可以放置在您的主资源文件夹中)
感兴趣的配置是:
房源名称 | 说明 | 因为 |
---|---|---|
|
指定事务允许的最大超时时间(以毫秒为单位)。默认为 300000。这意味着调用 UserTransaction.setTransactionTimeout() 的值高于此处配置的值将被最大化到该值。对于 4.x 或更高版本,值 0 表示没有最大值(即允许无限超时)。注意:从 5.0 开始,使用 0 会干扰恢复。相反,使用 Long.MAX_VALUE 来指定无限制。 | 3.x, 4.x |
|
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 秒的时间。