Spring Boot热部署:快速更新应用程序而无需重启服务器

举报
bug菌 发表于 2023/10/11 17:21:46 2023/10/11
【摘要】 🏆本文收录于《Spring Boot从入门到精通》,专门攻坚指数提升,2023 年国内最系统+最强(更新中)。


🏆本文收录于《Spring Boot从入门到精通》,专门攻坚指数提升,2023 年国内最系统+最强(更新中)。

本专栏致力打造最硬核Spring Boot 系列教程,从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

前言

在进行Java开发时,每次修改完代码都需要重新编译和部署,导致开发效率很低。如果能自动重新部署,那么就可以大大提高开发效率。本文将介绍如何使用Spring Boot实现自动热部署。

摘要

本文将介绍如何使用Spring Boot和Spring DevTools实现自动热部署,为Java开发者提供更高的生产力。

正文

先来给大家科普下热部署相关的知识点,防止有些小伙伴不太清楚。

何为热部署?

热部署指在应用程序运行过程中,对其进行修改后,无需停止和重启应用程序即可使修改生效。也就是说,程序可以在运行状态下进行更新或者重新部署。

热部署有何好处?

热部署指在应用程序运行过程中,对其进行修改后,无需停止和重启应用程序即可使修改生效。也就是说,程序可以在运行状态下进行更新或者重新部署。

热部署的好处主要有以下几点:

  1. 提高开发效率。热部署可以减少应用程序部署和配置的时间,缩短开发周期。

  2. 减少停机时间。热部署可以在应用程序运行时进行更新,而无需停机重启,减少了业务中断的风险。

  3. 增强用户体验。应用程序在无需重启的情况下进行更新,可以提供更加流畅的用户体验,避免了因停机维护而影响用户的使用体验。

热部署有啥弊端?

热部署的弊端主要有以下几点:

  1. 可能会增加系统复杂性。使用热部署需要特定的技术和工具支持,这可能会增加系统的复杂性。

  2. 可能会导致内存溢出等问题。在热部署过程中,旧的应用程序和新的应用程序会同时存在于系统中,可能会导致内存等资源的消耗过大,从而出现性能问题或者内存溢出等错误。

  3. 热部署可能会导致应用程序状态丢失。在热部署过程中,应用程序的状态可能会丢失,需要特殊的处理方式来保证状态的正确性。

常见的热部署方式

以下是几种常见的Spring Boot热部署方式:

  1. 使用Spring Loaded:Spring Loaded是一个开源的JVM热部署解决方案,可以在应用程序运行时重新加载类文件。可以通过在应用程序的类路径中添加Spring Loaded的JAR文件来使用它。

  2. 使用DevTools:Spring Boot DevTools是一个可选的模块,它提供了很多有用的开发工具,包括热部署。可以通过将“spring-boot-devtools”模块作为依赖项添加到项目中来使用它。

  3. 使用JRebel:JRebel是一种Java热部署工具,可以在应用程序运行时重新加载类文件和资源文件。可以将JRebel插件添加到开发环境中,然后在应用程序启动时启用JRebel。

  4. 使用DCEVM和HotSwapAgent:DCEVM是一个可以替换Java虚拟机(JVM)的修改版JVM,可以支持类热部署。HotSwapAgent是一个开源的热部署解决方案,可以与DCEVM一起使用,以在应用程序运行时重新加载类文件。

需要注意的是,这些热部署工具都有其自身的限制和局限性。在使用这些工具时,需要谨慎考虑其适用性和影响范围。

如下我便用Spring Boot DevTools 工具来进行热部署演示,具体如下:

Spring Boot DevTools

Spring Boot DevTools是一个在开发阶段提高生产力的工具,它提供了自动重启应用程序、自动重新加载修改后的页面和资源等功能。Spring Boot DevTools可用于侦听类路径上的更改并重新启动应用程序。

实现热部署

为了实现自动热部署,我们需要在项目中添加Spring Boot DevTools依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

然后在IDE中开启自动构建功能,这样就可以在修改代码时自动重新编译和构建应用程序。

接下来,我们还需要将应用程序配置成使用热部署功能。在application.properties文件中添加以下配置:

# Enable auto-restart
spring.devtools.restart.enabled=true

# Reload server endpoints
spring.devtools.restart.additional-paths=src/main/java

这样我们就可以在修改后自动重启应用程序并重新加载修改后的页面和资源了。

演示代码

以下是一个简单的演示代码,用于演示如何使用Spring Boot和Spring DevTools实现自动热部署。

pom.xml

<dependencies>
    <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>
</dependencies>

Application.java

@SpringBootApplication
@RestController
public class Application {

    @GetMapping("/")
    public String index() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

index.html

<!DOCTYPE html>
<html>
<head>
    <title>Spring Boot Demo</title>
</head>
<body>
    <h1>Welcome to Spring Boot</h1>
    <p>This is a demo page for Spring Boot DevTools</p>
</body>
</html>

最终效果

运行应用程序后,在浏览器中访问http://localhost:8080/,会显示“Hello World!”,然后修改index.html中的内容,保存文件,应用程序会自动重启并加载修改后的页面。

这里你们大可进行修改演示,从而避免了修改代码导致的项目重启等繁琐步骤,还是很好用的。

测试用例

我们可以通过下面的测试用例来测试应用程序是否正确地实现了自动热部署。

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
class ApplicationTests {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void contextLoads() throws Exception {
        mockMvc.perform(get("/"))
                .andExpect(status().isOk())
                .andExpect(content().string("Hello World!"));
    }

}

测试用例中模拟了一个HTTP GET请求,访问根路径“/”,并检查响应是否包含“Hello World!”文本。如果测试用例执行成功,则说明自动热部署功能已经正确地实现了。

小结

本文介绍了如何使用Spring Boot和Spring DevTools实现自动热部署,提高Java开发阶段的生产力。我们可以通过自动重启应用程序、自动重新加载修改后的页面和资源等功能,实现自动化地重新部署应用程序。

附录源码

  如上涉及所有源码均已上传同步在「GitHub」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你


无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Spring Boot」,从入门到精通,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。