tomcat停掉后,存储过程不会继续运行

goneswing 2009-08-03 05:49:00
我们有一个Web系统,当用户提交一个请求后,在java中会启动一个新的线程去调用存储过程执行一个任务, 存储过程会执行5分钟左右. 正常情况下系统会执行正常. 但是当用户提交请求后, 存储过程正在运行, 可能运行了2分钟,这时把tomcat停掉, 结果存储过程也不会继续运行,停掉了. 请问是什么原因导致存储过程不会继续运行? 谢谢
...全文
125 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
goneswing 2010-07-01
  • 打赏
  • 举报
回复
今天刚看倒还没有结贴. 问题还是没有解决. 先结了
goneswing 2010-07-01
  • 打赏
  • 举报
回复
关于4楼的观点要用new thread. 我的代码中可以看出是已经用了一个new thread.

但是SPC在DB2上已经在执行,这时候tomcat停掉会发什么指令到数据库说要停掉SPC的执行吗?
注: SPC中有commit语句. 因此有部分数据已经提交了.
xiaocaogf 2009-08-13
  • 打赏
  • 举报
回复
赞成4楼的观点
goneswing 2009-08-12
  • 打赏
  • 举报
回复
但是SPC在DB2上已经在执行,这时候tomcat停掉会发什么指令到数据库说要停掉SPC的执行吗?
goneswing 2009-08-10
  • 打赏
  • 举报
回复
Java SPC 代码. 用的是Spring

public class ExecuteBatchSummarySPC extends StoredProcedure {
private static final String SPC_NAME = "ExecuteBatchSummary";

public ExecuteBatchSummarySPC(DataSource dataSource) {
super(dataSource, SPC_NAME);
declareParameter(new SqlParameter("ITRANSINSTKEY", Types.CHAR));
compile();
}

public Map execute(String transInstKey) {
Map<String, Object> inParams = new HashMap<String, Object>(4);
inParams.put("ITRANSINSTKEY", transInstKey);
Map outParams = execute(inParams);
if (outParams.size() > 0)
return outParams;
else
throw new NoOutputParameterException(SPC_NAME);
}
}


Java调用SPC代码.

Thread t = new Thread(new Runnable() {
public void run() {
ExecuteBatchSummarySPC spc = new ExecuteBatchSummarySPC(ds);
spc.execute(transInstKey);
}
});
t.start();


具体的DB2的SPC代码就不用贴了吧.

需要澄清一点的是: 当Web端提交执行SPC请求后, SPC在DB2上已经在执行,在执行到一半的时候,这时候把Tomcat停掉, 结果发现DB2中SPC也会停掉. 奇怪的就是这里. 请大家诊断一下.
fish200x 2009-08-10
  • 打赏
  • 举报
回复
他的存储过程是通过java代码来调用的,tomcat停掉了,当然用不了咯
tomcat停掉的问题,这个需要去查一下的
wuliang_5016 2009-08-05
  • 打赏
  • 举报
回复
你可以将存储过程写到DBMS中,让其代理执行,这样的话,即使TOMCAT停了,只要数据库的服务没停,也是没关系的。
xuexijava 2009-08-05
  • 打赏
  • 举报
回复
没遇到过这种奇怪的事情,贴代码出来看看
zhangshufei8001 2009-08-05
  • 打赏
  • 举报
回复
tomcat服务器都关了,相当于把电脑关机了,你的计算机还能运行吗?呵呵!
jinhuiyu 2009-08-05
  • 打赏
  • 举报
回复
没看到代码

不过一般是因为Transaction回滚了,你在执行JDBC操作的时候,每一个JDBC连接多是一个事务,这个事物只有执行完提交了以后才算完成,否则就会进行事务回滚,你这个一般就是这种情况。

可以查看一下你的数据源设置
DryKillLogic 2009-08-03
  • 打赏
  • 举报
回复
哦。。。精辟!
绿绦 2009-08-03
  • 打赏
  • 举报
回复
虽然是那个不同的程序运行但他们在你的系统中是一个进程调用的

你把tomcat关了 相当于你把进程关了 所以他不会执行
需要执行的时候你可以在调用存储过程的前面new一个线程来处理


个人意见

绿绦工作室
DryKillLogic 2009-08-03
  • 打赏
  • 举报
回复
存储过程不是属于JDBC部分的么。。。与web服务器没关系吧,不太懂
zl3450341 2009-08-03
  • 打赏
  • 举报
回复
。。。。。tomcat都关了
zhougaotao 2009-08-03
  • 打赏
  • 举报
回复
你的tomcat服务器都没有运行了,你说存储过程还会运行吗?

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧