2010-02-18 66 views
5

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

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

回答

3

我试图做一些像Unix pid-file:你的脚本应该周期性地(也许每次10/100/1000迭代)检查文件系统中某个文件的可用性,并在它包含某个值时停止执行,或者也许如果存在或根本不存在。

当然,这可以在数据库中的一个领域,应用范围(用适当的锁定策略),或任何变量,你找到合适的。

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

+0

一个非常简单的解决方案。下面的代码为我做了: ' ' – stomcavage 2010-02-18 20:55:15

2

在通过150,000条记录的循环中,您可以在任何您认为合适的数字处停下来。设置一个计数器变量,只要它在循环中只有<cfabort><cfbreak>

0

一些产品,如fusionreactor,你可以杀死的基本Java线程,但如果数据库确实有要求的控制,你不能让它停止(对数据库)。您必须等到数据库返回该线程的控制权。

2

你可能会想使用运行在cfthread过程。

开始你的过程是怎样的?

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

然后,你可以通过使用杀死线程...

<cfthread action="terminate" name="myThread"/> 
+0

这可以杀死CF线程,释放CF资源,但根据其中数据库是,它将继续完成其最后执行的命令。我不完全确定部分数据会发生什么情况,具体取决于它是如何/不包含在事务中和/或发生了什么样的链接/循环。 – williambq 2013-06-06 16:00:27

1

如果您有管理软件,如安装FusionReactor,您可以使用停止运行脚本。