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有更新时,可以看到控制台的变化
    依赖包被更新后的事件图

看了很多文章,写的命令都有问题,最后还是机缘巧合的成功了!

posted @ 2020-11-24 16:42  张占岭  阅读(2062)  评论(0编辑  收藏  举报