1. 程式人生 > >使用spring-loaded實現應用熱部署

使用spring-loaded實現應用熱部署

作為一名Java開發者您是否會遇到這種情況:新增一個方法或欄位必須重啟tomcat才能對其進行除錯?

有沒有辦法使得不重啟tomcat就能除錯呢.spring-loaded就可以.

且看下面這一段話:

Spring Loaded allows you to add/modify/delete methods/fields/constructors. The annotations on types/methods/fields/constructors can also be modified and it is possible to add/remove/change values in enum types.


意思是它允許你動態得新增/修改/刪除某個方法/欄位/構造方法,同樣可以修改作用在類/方法/欄位/構造方法上的註解.也可以新增/刪除/改變列舉中的值.

下面我們就來實驗一把.

1.下載spring-loaded,我這裡下在的是springloaded-1.2.5.RELEASE.jar,把jar放在C盤根目錄

2. eclipse新建一個web工程,名為testsl,注意新增tomcat對應jar


2. 新建一個Servlet,名為TestServlet,內容如下:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().println("hello world");
	}

}

3. 右鍵專案->Run as->Run configurations... 在tomcat啟動項新增VM引數-javaagent:C:/springloaded-1.2.5.RELEASE.jar -noverify


4. 啟動tomcat,瀏覽器輸入http://localhost/testsl/TestServlet

此時會正常列印hello world

5. 在TestServlet中新增一個方法和一個屬性,如下

public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().println("hello world");
		response.getWriter().println(this.getName());
	}
	
	private String name = "Jim";
	
	public String getName() {
		return name;
	}

}

修改完後,直接重新整理瀏覽器,此時會列印
hello world
Jim

這樣,我們不用重啟tomcat就能直接除錯程式了.

上文所說的是spring-loaded在開發模式中的使用.接下來在講下線上模式如何使用.

線上模式使用原理跟開發模式一樣

1. 把springloaded-1.2.5.RELEASE.jar放到tomcat的bin資料夾下

2. 開啟bin下的catalina.bat,新增如下一句

set JAVA_OPTS=-javaagent:springloaded-1.2.5.RELEASE.jar -noverify

這樣就完成了spring-loaded的安裝,能夠檢測tomcat下部署的webapp,在不重啟tomcat的情況下,實現應用的熱部署。