杀死ColdFusion中正在运行的进程?

时间:2010-02-18 17:07:23

标签: coldfusion

我正在ColdFusion中编写数据库加载脚本。它在十几个表中加载大约150,000条记录。我正在通过Web浏览器请求运行脚本。我请求页面后有没有办法杀死进程?我可以在浏览器中停止页面,但数据库在后端继续插入,直到脚本完成,这使调试过程非常缓慢,因为我每次都必须运行整个脚本。我可以通过Java后端做些什么吗?

我所处的环境是通过IIS运行的ColdFusion 8。我禁用了性能监视,但我希望能够像在性能监视器中那样模仿杀死作业的能力。

5 个答案:

答案 0 :(得分:3)

我试图制作像Unix pid-file这样的东西:你的脚本应该定期(可能每次10/100/1000次迭代)检查文件系统中某个文件的可用性,如果它包含某个值,则停止执行,或者如果存在或根本不存在。

当然,这可以是数据库中的字段,应用程序范围中的变量(具有适当的锁定策略),或者您认为合适的任何内容。

您还需要第二个脚本,它将更改“pid-object”的状态。这可以像您可以使用浏览器拉动的另一个.cfm一样简单。

答案 1 :(得分:2)

在150,000条记录的循环中,您可以按照您认为合适的数字停止它。设置一个计数器变量,只要它在循环中到达<cfabort><cfbreak>

答案 2 :(得分:2)

您可能希望使用cfthread运行该过程。

像......一样开始你的过程。

<cfthread name="myThread" action="run"> 
    ...Your loop to insert into database....
</cfthread>

然后你可以使用...

来杀死线程
<cfthread action="terminate" name="myThread"/>

答案 3 :(得分:1)

如果安装了FusionReactor等管理软件,可以使用它来暂停运行脚本。

答案 4 :(得分:0)

使用像fusionreactor这样的产品,可以杀死底层的java线程,但如果数据库实际上已经控制了请求,则无法使其停止(在数据库上)。您必须等到数据库返回对线程的控制权。