Tuesday, November 24, 2020

java~通过springloaded实现热部署

之前写过使用自定义的classLoader进行动态加载,热部署;它有很多弊端,我总结一下:

  1. 当前项目不能引用第三方包
  2. 当前项目必须使用反射的方式调用第三方包的方法
  3. 写死的一些路径

springloaded

源码:https://github.com/spring-projects/spring-loaded
功能:实现java项目的依赖包的热更新

研究了一天,终于研究出了成功了,国内也有不少这方面的文章,但也有一些坑,所以我总结一下:

  • 源项目 a-start-hot-deploy
  • 依赖项目 a-start-hot-dependency
  • 工具 springloaded 1.2.5 (https://repo.spring.io/release/org/springframework/springloaded/1.2.5.RELEASE/springloaded-1.2.5.RELEASE.jar)

实现方式

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

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









原文转载:http://www.shaoqun.com/a/492990.html

小马哥:https://www.ikjzd.com/w/1655

联动优势电子商务:https://www.ikjzd.com/w/1921

tchibo:https://www.ikjzd.com/w/1928


之前写过使用自定义的classLoader进行动态加载,热部署;它有很多弊端,我总结一下:当前项目不能引用第三方包当前项目必须使用反射的方式调用第三方包的方法写死的一些路径springloaded源码:https://github.com/spring-projects/spring-loaded功能:实现java项目的依赖包的热更新研究了一天,终于研究出了成功了,国内也有不少这方面的文章,但也有
amazon go:amazon go
巴士物流:巴士物流
深圳金沙湾住哪里便宜?:深圳金沙湾住哪里便宜?
海南地下瀑布好玩吗?:海南地下瀑布好玩吗?
8月份厦门的天气怎么样?8月份旅游去厦门怎么样?:8月份厦门的天气怎么样?8月份旅游去厦门怎么样?

No comments:

Post a Comment