使用springloaded進行java應用熱部署

54powerman發表於2017-06-05

試了下不錯,不像JRebel那樣收費,這個開源的,感覺很好用。

首先下載springloaded.jar

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

也可以使用maven拉取:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>springloaded</artifactId>
  <version>1.2.7.RELEASE</version>
</dependency>

普通jdk應用

java -javaagent:/Users/pollyduan/springloaded-1.2.7.RELEASE.jar -noverify SomeJavaClass

只要修改class檔案,立即生效,SomeJavaClass修改無效。

tomcat配置

關閉tomcat的reloadable

修改server.xml。

<Context reloadable="false"

如果希望eclipse中所有的工程都預設為reloadable為false,那麼如下配置:

在Servers檢視(預設在下面的視窗中),雙擊你的伺服器;
將"Server options"配置項中的"Modules auto reload by default"取消選中,關閉儲存。

修改啟動配置增加代理

如果是純tomcat中配置,修改啟動指令碼catalina.bat(linux中為catalina.sh):

#windows
#set JAVA_OPTS=-javaagent:/Users/pollyduan/springloaded-1.2.7.RELEASE.jar -noverify
#linux
export JAVA_OPTS="-javaagent:/Users/pollyduan/springloaded-1.2.7.RELEASE.jar -noverify"

只要修改class檔案,立即生效。

Eclipse

修改server配置

修改eclipse的Servers模組中的server.xml檔案。

<Context reloadable="false"

修改啟動指令碼

在eclipse中,第一次啟動執行之後,修改“Run Configurations”,在啟動指令碼的”Arguments” 選項卡,在“VM arguments”文字框中增加:

-javaagent:/Users/pollyduan/springloaded-1.2.7.RELEASE.jar -noverify

使用修改後的啟動指令碼,重新啟動,既可實現修改後自動載入了。

控制檯不會顯示任何資訊。

非Spring專案的說明

可以使用熱載入功能,但是會提示:

Reloading: JVMPlugin: warning: unable to clear BEANINFO_CACHE, cant find field

忽略即可。如果加入spring容器的依賴和配置,就不會出現了。

相關文章