java~通過springloaded實現熱部署


之前寫過使用自定義的classLoader進行動態加載,熱部署;它有很多弊端,我總結一下:

  1. 當前項目不能引用第三方包
  2. 當前項目必須使用反射的方式調用第三方包的方法
  3. 寫死的一些路徑

springloaded

源碼:https://github.com/spring-projects/spring-loaded
功能:實現java項目的依賴包的熱更新

研究了一天,終於研究出了成功了,國內也有不少這方面的文章,但也有一些坑,所以我總結一下:

實現方式

a-start-hot-dependency里有一個類


public class HelloImpl implements Hello {
    @Override
    public String password() {
        return "hello 牛";
    }
}

添加項目依賴

   <dependency>
            <groupId>com.lind</groupId>
            <artifactId>a-start-hot-dependency</artifactId>
            <version>1.0.0</version>
   </dependency>

依賴也里方法調用

  @GetMapping("auto")
    public ResponseEntity auto() {
        return ResponseEntity.ok(new HelloImpl().password());
    }

部署方式

  1. 復制三個包到發布的目錄springloaded-1.2.5.RELEASE.jar,a-start-hot-deploy-1.0.0.jar,a-start-hot-dependency-1.0.0.jar
  2. 使用java命令進行部署java -noverify -javaagent:D:/springloaded-1.2.5.RELEASE.jar -Dspringloaded="watchJars=a-start-hot-dependency-1.0.0.jar" -jar a-start-hot-deploy-1.0.0.jar
  3. 當前a-start-hot-dependency-1.0.0.ja有更新時,可以看到控制台的變化
    依賴包被更新后的事件圖

看了很多文章,寫的命令都有問題,最后還是機緣巧合的成功了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM