1. 程式人生 > >Java動態載入,避免停服更新

Java動態載入,避免停服更新

背景:目前除錯、執行java服務程式時,如果class檔案有更新,不能動態載入更新後的class執行(僅除錯時,勾選自動編譯的情況下,斷點所在的函式可以在修改後將斷點執行到函式的第一行)。如服務程式啟動過慢,或者服務程式正在執行其他操作,非常影響使用者體驗,甚至帶來災難。

方案:這應該是個比較成熟的技術了,之前一直有這個想法,但是發現別人已經實現了,就拿來用了一下。這裡只是作個使用記錄。

對class檔案內更新的方法的呼叫:

new DynamicClassLoader;ReflectUtil.getMethod;ReflectUtil.newInstance (獲取Object,用於invoke);ReflectUtil.invoke

注:

1、動態載入的呼叫程式碼 (new DynamicClassLoader;ReflectUtil.getMethod;ReflectUtil.newInstance;ReflectUtil.invoke) 必須和上述連結中的實現程式碼放在一個jar工程裡

2、動態載入呼叫的更新class檔案對應的類和方法不必在上述jar工程裡

3、盡情享受動態載入帶來的樂趣吧

待改進:

1、更新class檔案時,自動觸發動態載入;未更新時不觸發

2、動態載入的class檔案的函式名、引數有變化,都通過配置檔案修改和執行時讀取