2010-02-18 65 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,您可以使用停止運行腳本。