Transactions 如何在Spring重试期间根据线程增加Atomikos默认jta超时

Transactions 如何在Spring重试期间根据线程增加Atomikos默认jta超时,transactions,jta,spring-retry,atomikos,Transactions,Jta,Spring Retry,Atomikos,我将Spring引导应用程序用于Atomikos事务。我在transactions属性中将默认超时配置为10000ms,即10秒 交易、财产 com.atomikos.icatch.default_jta_timeout=10000 com.atomikos.icatch.threaded_2pc=true com.atomikos.icatch.max_timeout=300000 com.atomikos.icatch.max_actives=1000 由于Jta超时,如果任何用户事务花

我将Spring引导应用程序用于Atomikos事务。我在transactions属性中将默认超时配置为10000ms,即10秒

交易、财产

com.atomikos.icatch.default_jta_timeout=10000
com.atomikos.icatch.threaded_2pc=true
com.atomikos.icatch.max_timeout=300000
com.atomikos.icatch.max_actives=1000 
由于Jta超时,如果任何用户事务花费的时间超过10秒,则该特定线程事务将获得超时并回滚

超过指定阈值时间的用户事务的Atomikos日志

[Atomikos:3] [] [] [] [] c.a.icatch.imp.ActiveStateHandler - Transaction InsightJTA160327483422900028 has timed out - rolling back...
我的问题是,我使用Spring重试来实现特定的功能。例如,如果发生任何数据库异常或MQ异常,则我将以30秒的间隔重试同一函数3次,如下所示

            retryTemplate.execute(context -> {
                log.info("Processing request...");   // Time interval 30 sec, max attempts 3  
                saveUserOperation(user);             // if any exception, current thread time out,      
                dropMessageToMQ(message);            // should be increased to 120S(120000ms) 
            });  
在这里,如果saveUserOperation或dropMessageToMQ抛出任何异常,则Spring重试将在30秒后开始,但在这里,我已配置默认JTA时间为10秒,因此在重试开始之前,事务已超时。我只是想知道,当重试发生时,是否有可能增加当前线程的超时时间


我可以增加默认超时,但它将适用于所有线程,我不想这样做。

在JTA
UserTransaction
对象上尝试
setTransactionTimeout

或者使用Spring的
@Transactional
,超时: