文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/。
1.背景
項目中需要解決一個這樣的問題:有兩個業務均需要每隔幾秒觸發一次,但是兩個業務都只是在規定的時間區域內才進行該行為。比如,在早上八點到晚上六點為上班時間,在這個時間段內兩個業務必須每隔幾秒被執行一次,下班后則停止工作。
2.思路
這個問題最開始我是想利用timer來解決,即做兩個timer,一個timer來控制一個事務,然后在各事務對應時間區域內執行。
但是考慮到Timer是在主線程里執行的,Thread 是在自己的線程中執行的,在多核多線程的 CPU 中,利用Thread的效率高更高一些。而且后期事務變多,控制更復雜,用timer也不是很利於擴展。所以最后決定使用多線程來解決該問題。
經過思考以及參閱類似案例,比如http://www.cnblogs.com/shuang121/archive/2012/07/05/2578033.html,最后將框架設計成如下結構:
3.具體實現
3.1 IshedulerJob
3.2 Job
3.3SchedulerConfiguration
3.4Scheduler
3.5 viewer
4. 優化
a.兩個事務均涉及到數據庫的多數據增刪查改,為了保證數據的唯一性,對數據庫操作均采取事務型操作。
b.為了避免數據庫的重復連接和關閉,這里盡量使用數據庫的長連接。同時,為了避免兩個事務共用一個數據庫連接而出現的問題,特地使用簡單的數據庫連接池進行處理。
c.為了連接池能被共享,對連接池所在類進行單例模式。
-----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^