java—如何解决由于循环内的大量db调用而导致的事务超时—ejb

6vl6ewon  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(567)

如主题中所述,总超时时间为120秒,在处理事务时超过。实现类似于下面的psuedocode。
最初的想法是使用transactionattributetype.not\u supported将methoda从tx上下文中删除,并将代价高昂的db方法调用移动到requires\u new(new transaction)。但考虑到方法a的实施,这是相当忙碌的。而且db proc已经优化到了最佳性能。
有没有解决办法:)真的很感激

public String methodA(x){
 String resp;
    ------ other implementations

    if(x==10){

        for(int k; k < 10 ; k++){
            dbcall() --- method with heavy db proc which costs around 15seconds
        }
    }
    ------ other implementations

   return resp;
}

更新:更改超时持续时间不是一个选项

zu0ti5jz

zu0ti5jz1#

对于bean管理的事务,可以使用usertransaction接口的settransactiontimeout方法来设置超时,对于容器管理的事务,应该使用特定于服务器的配置(即对于jboss,可以使用annotation org.jboss.ejb3.annotation.transactiontimeout)。
例子:

@TransactionTimeout(unit=TimeUnit.MINUTES, value=10)
    public void doAction() {

doaction方法事务的有效期最长为10分钟,在bean管理的事务上,可以使用以下方法处理相同的事务:

public void doAction() {
        try {
            ut.setTransactionTimeout(60 * 10);
            ut.begin();

注意,该方法以秒为参数(即10分钟=10*60)。
资源
资源2

相关问题