2017-02-17 54 views
0

我已經編寫了一個基於Spring MVC的Rest應用程序,其中我需要做一些驗證,一些驗證是Hard規則,其中一些是Soft規則。軟規則如果失敗會生成警告,但如果硬規則失敗,則會生成錯誤。 首先,我檢查硬規則,如果有任何失敗,那麼在那個時候,我將返回響應,但讓過程繼續處理後續的軟規則。發佈自定義事件並在基於Spring MVC的Rest應用程序中異步處理它

這裏我想知道如何在Spring中創建兩個並行線程來做到這一點? 或如何發佈自定義事件並在另一個線程中異步處理它並讓原始線程在Spring中繼續其工作?

我知道@async和SpringTaskExecutor,但如何在這裏最好地使用它們。

我在尋求設計和建築指導方針和想法,以儘可能最好的方式處理這項任務。

回答

1

正如前面提到的軟規則(s)驗證失敗只會產生警告,它可以在一個單獨的後臺進程中處理。通過這種方式,主線程可以專注於硬規則,而不會打擾軟規則。

對於低於點上方行爲需要實施

  • 對於每一個請求持續的相關數據,用於軟規則處理,與標誌processed=false和優選時間戳(用於插入和處理)。
  • 發佈持久數據,讓主線程繼續進行硬規則處理。
  • 引入定期服務(通過@Scheduled),定期提取未處理的數據並將其標記爲processed=true後軟規則處理以及相關的處理時間戳。 (這將作爲充當後臺進程將定期輪詢未處理規則(多個數據)

請確保各自的交易即。軟規則數據插入和處理是很好的隔離。當規則處理正在進行時,錯誤處理在系統故障方面應該是健壯的。

如果需要更多信息,請在評論中告知。

+0

請詳細說明一些細節!我的意思是我應該使用什麼構造,或者更確切地說,我應該使用Async來分叉新線程,這是在Spring中啓動後臺進程的首選方式 –

+0

@JohnDoe不需要'@Async'或分支新線程作爲主線程將僅驗證硬規則** **和軟規則驗證將由後臺進程完成。 –

+0

也正如在後期使用'@ Scheduled'中提到的後臺進程。見[這裏](https://spring.io/guides/gs/scheduling-tasks/)和[這裏](https://docs.spring.io/spring/docs/current/spring-framework-reference/html /scheduling.html#scheduling-enable-annotation-support)獲取樣品。 –

相關問題