springboot(8)-热部署

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。接下来我们就通过编码的方式实现springboot热部署。

一)新建应用&添加依赖

新建项目之后,除了添加springboot基础依赖之外,还要添加spring-boot-devtools:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-devtools</artifactId>

</dependency>

二)修改ide配置&浏览器缓存禁用

为了实现热部署,ide要支持自动编译,并且验证的时候要禁用浏览器缓存(否则看不到变更后内容)。

1.修改idea配置

在idea中打开File->Settings->Compile,勾选Build project automatically:

使用快捷键Ctrl+Shift+Alt+/,选择Registry,然后勾选Compiler autoMake allow when app running:

这样我们就在服务端启用了在应用运行期间自动编译和构建。

2.禁用浏览器缓存

本例中我们使用chrome测试,如果不禁用缓存,后端应用动态部署后前端请求可能看不到变更和新增内容,点击F12或者Ctrl+Shift+i后,在network选项中勾选Disable cache:

三)编码&测试

编写一个简单的Controller:

@RestController

public class IndexController {

@GetMapping("/hello")

public String hello() {

return "hello";

}

}

启动应用后浏览器输入http://localhost:8080/hello:

应用启动没有问题并且能够接收和处理请求。修改Controller增加如下内容:

@GetMapping("/name")

public String name() {

return "my name is shuya";

}

保存后发现应用自动重新编译启动,浏览器输入http://localhost:8080/name:

请求能够被正常的接收和处理,也就是说明我们配置的springboot热部署已经生效。

总结

springboot热部署在开发阶段特别实用,我们对应用修改之后不需要手动点构建和部署就能自动重启后看到效果,当然可能springboot实现热部署还有其他方式,这里暂不做过多探讨,有兴趣的可以自己研究一下。

本文分享自微信公众号 - PersistentCoder(TyphoonChan),作者:叔牙

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • spring之session

    Spring Session的目标是从存储在服务器中的HTTP会话的限制中释放会话管理。

    叔牙
  • springboot(6)--容器

    我们以Main方式启动springboot应用,默认是使用springboot内置容器tomcat启动的,springboot支持的容器除了tomcat...

    叔牙
  • springboot(1)--快速入门

    Spring Boot可以轻松创建可以运行的独立的,生产级的基于Spring的应用程序。我们对Spring平台和第三方库进行了一种自以为是的观点,这样您...

    叔牙
  • IDEA 配置Springboot项目热部署

    注意以下的热部署方式在IDEA是默认没有打开自动编译的,手动编译需要快捷键(Ctrl+Shift+F9),自动编译的修改配置如下:(注意刷新不要太快,会有1-2...

    程序员小强
  • spring-boot-admin 2.0小试牛刀

    新版前端改用vue.js进行了重构,后端的话,使用event sourcing的原则进行了重构,支持spring5,移除了spring-cloud-starte...

    codecraft
  • springboot2.x中的服务监控

    先看下图的managment.security.enable,现在已经是过时API了,那么我们必须要更新知识库了。

    小尘哥
  • SpringCloud2.0入门4-springboot-admin监控

    上一节为springboot项目添加springboot-admin监控 学习了基于springboot1.5自己注册到admin的方法。接下来学习结合Eure...

    Ryan-Miao
  • 原 荐 spring boot + Thym

    kinbug [进阶者]
  • 记spring boot快速改造老项目

    博主公司一个项目在开发中使用某些功能的时候,受限于spring低版本的限制,故索性将整个模块升级为spring boot,在这里做个记录,希望能帮助到有相同场景...

    kl博主
  • nacos 服务注册与配置中心

    启动服务之后,访问 http://localhost:8848/nacos/#/serviceManagement 即可看到以下信息:

    wsuo

扫码关注云+社区

领取腾讯云代金券