3.Spring Boot 添加热部署

上一篇文章中我们启动了一个Spring Boot 程序,其中我们添加了一个Controller,那现在如果我想继续添加一个SayHiController,我们就需要重新启动,因为新写的Controller并没有被加载到Spring容器中,如果我们直接请求就会出现404错误,那有什么办法可以规避掉这种麻烦的操作呢,我要的效果是写好代码之后就马上是可以运行看到效果的呢,Java 语言里面有一种叫作 Hot Swapping, 那么Spring 应该也可以实现相应的功能的插件, 接下来就来使用下这个插件。

  1. 添加依赖:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
  1. 修改运行时的代码,然后重新Build一下代码,然后观察是否运行最新的代码:

我们添加了一个requestMapping :

 @RequestMapping(value = "/sayYes")
  public String SayNo(){
    return "No";
  }

然后重新Build一下代码:

然后访问地址 : localhost:8080/sayYes, 可以看到界面上面显示 No

  1. SpringBoot - DevTools 几个注意点:

(1)首先SpringBoot-devtools 当运行全包形式的程序时, 就是 java -jar *.jar 会自动disabled,也就是在product 状态下面会自动disable, 还有一种情况就是在container下面,我们需要通过参数设置disable: -Dspring.devtools.restart.enabled=false

(2)实际上devtools 在项目启动的时候,会创建出两个ClassLoader, 一个用于加载启动时的base classes,当发现类路径下面的class发生变化的时候,就重启项目,所以实际上面是re-start, 这也是为什么我们没有观察到重启,实际上面就是classLoade快速替换,从baseClassloader 到 restartClassLoader, 其实你也可以使用JRebel, 当然有一些static的文件我们不想替换,那我们就可以使用exclude进行排除,当然我们可以设置include, 来包含一些不在classPath 下面的,比如说在其他的modules里面的,

(3) 默认是disable cache的,比如说Spring MVC httpResponseHeader cache,

(4)devtools 也可以使用在remote application情况下面,需要额外加一些配置信息。

更多devtools的使用可以参见Spring Boot 官方的文档。

github : https://github.com/1991lin/shopping

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容