上一篇文章中我们启动了一个Spring Boot 程序,其中我们添加了一个Controller,那现在如果我想继续添加一个SayHiController,我们就需要重新启动,因为新写的Controller并没有被加载到Spring容器中,如果我们直接请求就会出现404错误,那有什么办法可以规避掉这种麻烦的操作呢,我要的效果是写好代码之后就马上是可以运行看到效果的呢,Java 语言里面有一种叫作 Hot Swapping, 那么Spring 应该也可以实现相应的功能的插件, 接下来就来使用下这个插件。
- 添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
- 修改运行时的代码,然后重新Build一下代码,然后观察是否运行最新的代码:
我们添加了一个requestMapping :
@RequestMapping(value = "/sayYes")
public String SayNo(){
return "No";
}
然后重新Build一下代码:
然后访问地址 : localhost:8080/sayYes, 可以看到界面上面显示 No
- 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