gpt4 book ai didi

java - 从不同线程调用时查询超时

转载 作者:行者123 更新时间:2023-11-30 02:45:10 24 4
gpt4 key购买 nike

服务器在servlet中接收http请求,servlet调用ejb组件中的方法。

public void ejbMethodVariant1(...) {
//calling stored proc
...
//calling same stored proc
}

public void ejbMethodVariant2(...) {
//calling stored proc
...
Thread t = new Thread(() -> {
//calling same stored proc
});
t.start();
try {
t.join();
} catch (InterruptedException e){
...
}
}

存储过程始终相同。“调用存储过程”意味着:

  1. 从数据源获取连接
  2. 创建可调用语句
  3. 执行可调用语句
  4. 结束语
  5. 关闭连接

在变体 1 中 - 一切正常,没有错误。第一次和第二次调用中的连接具有 autoCommit=false。

在变体 2 中 - 第一次调用成功完成,第二次 - 2 分钟后超时(com.microsoft.sqlserver.jdbc.SQLServerException:查询已超时。)。第一次调用中的连接具有 autoCommit=false,第二次调用中的连接具有 autoCommit=true

最佳答案

您正在启动一个新线程,该线程没有复制事务上下文、安全上下文等。如果您想使用新线程来运行该语句,请考虑使用 EE Concurrency Java EE 7 中的实用程序。

关于java - 从不同线程调用时查询超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40398517/

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