因此,我有一項服務設置爲從用戶上傳的文件導入大量數據。我希望用戶能夠在文件正在處理時繼續在網站上工作。我通過創建一個線程來完成此任務。管理Grails服務中的線程
Thread.start {
//work done here
}
現在問題出現了,我不想讓多個線程同時運行。這是我試過的:
class SomeService {
Thread thread = new Thread()
def serviceMethod() {
if (!thread?.isAlive()) {
thread.start {
//Do work here
}
}
}
}
但是,這是行不通的。 thread.isAlive()
總是返回false。有關我如何完成此任何想法?
它涉及GORM。我真的不喜歡爲此僅安裝一個插件。我可以繞過使用嗎? –
@JamesKleeh使用'withTransaction'應該可以做到這一點(至少如果你在休眠狀態下,我不會說mongo),但執行器插件的重量非常輕,所以我不會無視它。 –
@JamesKleeh,你可以在源代碼https://github.com/basejump/grails-executor/tree/master/src/groovy/grails/plugin/executor中獲取你需要的相關部分。我只是使用插件,如果我是你,爲了避免處理潛在的持久性問題... – rimero