spring-loaded熱部署

什麼是spring-loaded?

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

有什麼好處?

  1. 開發測試階段:可以在啓動後動態更改代碼調試,無需重啓減小切換debug時間(ps:對於eclipse而言,在debug時期只能作到動態更新方法體不能增長)
  2. 對於線上測試發佈階段: 可以在出現問題後直接替換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.jarlinux

/**
 * 類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");     
    }
    
}

改變爲git

/**
 * 類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機器待測試
相關文章
相關標籤/搜索