paulwong

          spring-loaded熱部署

          什么是spring-loaded?

          spring-loaded是一個對于jvm代理運行時期改變類文件的重載(重新加載),它轉換類loadtime讓他們服從后重新加載。不像“熱代碼替換”只允許一次簡單的改變JVM運行(例如更改方法體)spring-loaded允許您添加/修改/刪除/字段/方法構造函數。注釋類型/方法/字段/構造函數也可以修改和可以添加/刪除/修改值的枚舉類型。

          有什么好處?

          開發測試階段:能夠在啟動后動態更改代碼調試,無需重啟減少切換debug時間(ps:對于eclipse而言,在debug時期只能做到動態更新方法體不能增加)
          對于線上測試發布階段: 能夠在出現問題后直接替換class文件而不重啟應用(ps:對于外部提供的服務jar形式同樣能做到)
          怎么使用?

          項目地址

          https://github.com/spring-projects/spring-loaded

          第一步:下載文件
          http://repo.spring.io/release/org/springframework/springloaded/1.2.5.RELEASE/springloaded-1.2.5.RELEASE.jar

          第二步:配置jvm啟動參數

          eclipse
          eclipse:run as --> run configurations --> arguments -->> VM arguments
          -javaagent:E:\repository\org\springframework\spring-load\springloaded-1.2.5.RELEASE.jar 
          -noverify -Dspringloaded=verbose
          詳細描述:
          -javaagent: 配置java代理使用下載后的jar包路徑
          -noverify: 禁用字節碼驗證
          -Dspringloaded=verbose 顯示springloaded時的詳細信息


          image

          java命令啟動

          java -javaagent:E:\repository\org\springframework\spring-load\springloaded-1.2.5.RELEASE.jar -noverify Test  類似 

          java jar包動態替換

          1.打成runnable Jar
          2.命令啟動:

          java -javaagent:E:\repository\org\springframework\spring-load\springloaded-1.2.5.RELEASE.jar -noverify -Dspringloaded=watchJars=main.jar main.jar

          /**  * 類Test.java的實現描述:TODO 類實現描述   * @author Administrator 2016年7月4日 下午4:55:59  */ public class Test {     public static void main(String[] args) throws InterruptedException {          while(true) {             try {                 println();                 Thread.sleep(1000);             } catch (Throwable e) {                  e.printStackTrace();              }          }       }     public static void println() {          System.out.println("112222221222222");          }  } 

          改變為

          /**  * 類Test.java的實現描述:TODO 類實現描述   * @author Administrator 2016年7月4日 下午4:55:59  */ public class Test {     public static void main(String[] args) throws InterruptedException {          while(true) {             try {                 println();                 Thread.sleep(1000);             } catch (Throwable e) {                  e.printStackTrace();              }          }       }     public static void println() {          System.out.println("test replace jar");          }  } 
          3.重新打包替換
          PS:實測在window下無用 手上無linux機器待測試




          1

          posted on 2016-09-11 10:40 paulwong 閱讀(2021) 評論(0)  編輯  收藏 所屬分類: SPRING

          主站蜘蛛池模板: 深圳市| 建德市| 宜城市| 盘锦市| 寿阳县| 竹溪县| 新建县| 昂仁县| 玉屏| 临江市| 汕尾市| 赫章县| 马公市| 巴楚县| 清河县| 离岛区| 孟村| 黔东| 玛曲县| 团风县| 涡阳县| 锦州市| 巴彦淖尔市| 普格县| 余干县| 辛集市| 阿克苏市| 马山县| 东港市| 达日县| 璧山县| 昌黎县| 衡山县| 洛浦县| 镇赉县| 确山县| 封开县| 苗栗县| 女性| 玉屏| 绥滨县|