我在ColdFusion中编写数据库加载脚本。它在十几张表上加载了大约150,000条记录。我通过网络浏览器请求运行脚本。一旦我请求了页面,有什么办法可以终止这个过程?我可以停止浏览器中的页面,但数据库插入会在后端继续,直到脚本完成,这使得调试过程非常缓慢,因为我必须每次运行整个脚本。有什么我可以通过Java后端做什么?在ColdFusion中杀死一个正在运行的进程?
我所在的环境是通过IIS运行的ColdFusion 8。我禁用了性能监视,但我希望能够像性能监视器中那样模仿杀死作业的能力。
我在ColdFusion中编写数据库加载脚本。它在十几张表上加载了大约150,000条记录。我通过网络浏览器请求运行脚本。一旦我请求了页面,有什么办法可以终止这个过程?我可以停止浏览器中的页面,但数据库插入会在后端继续,直到脚本完成,这使得调试过程非常缓慢,因为我必须每次运行整个脚本。有什么我可以通过Java后端做什么?在ColdFusion中杀死一个正在运行的进程?
我所在的环境是通过IIS运行的ColdFusion 8。我禁用了性能监视,但我希望能够像性能监视器中那样模仿杀死作业的能力。
我试图做一些像Unix pid-file:你的脚本应该周期性地(也许每次10/100/1000迭代)检查文件系统中某个文件的可用性,并在它包含某个值时停止执行,或者也许如果存在或根本不存在。
当然,这可以在数据库中的一个领域,应用范围(用适当的锁定策略),或任何变量,你找到合适的。
您还需要第二个脚本来改变“pid-object”的状态。这可以像使用浏览器拉动另一个.cfm一样简单。
在通过150,000条记录的循环中,您可以在任何您认为合适的数字处停下来。设置一个计数器变量,只要它在循环中只有<cfabort>
或<cfbreak>
。
一些产品,如fusionreactor,你可以杀死的基本Java线程,但如果数据库确实有要求的控制,你不能让它停止(对数据库)。您必须等到数据库返回该线程的控制权。
你可能会想使用运行在cfthread过程。
开始你的过程是怎样的?
<cfthread name="myThread" action="run">
...Your loop to insert into database....
</cfthread>
然后,你可以通过使用杀死线程...
<cfthread action="terminate" name="myThread"/>
这可以杀死CF线程,释放CF资源,但根据其中数据库是,它将继续完成其最后执行的命令。我不完全确定部分数据会发生什么情况,具体取决于它是如何/不包含在事务中和/或发生了什么样的链接/循环。 – williambq 2013-06-06 16:00:27
如果您有管理软件,如安装FusionReactor,您可以使用停止运行脚本。
一个非常简单的解决方案。下面的代码为我做了: ' ' –
stomcavage
2010-02-18 20:55:15