程序员子龙(Java面试 + Java学习) 程序员子龙(Java面试 + Java学习)
首页
学习指南
工具
开源项目
技术书籍

程序员子龙

Java 开发从业者
首页
学习指南
工具
开源项目
技术书籍
  • 基础

  • JVM

  • Spring

  • 并发编程

  • Mybatis

  • 网络编程

  • 数据库

  • 缓存

  • 设计模式

  • 分布式

  • 高并发

  • SpringBoot

    • SpringBoot 整合redis
    • SpringBoot 线程池
    • springboot下整合mybatis
    • spring boot 配置文件的加载顺序
    • springboot启动不加载bootstrap.yml文件的问题解决
    • SpringBoot设置动态定时任务
    • springboot整合hibernate
    • ApplicationRunner、InitializingBean、@PostConstruct使用详解
    • Spring Boot 优雅的参数校验方案
    • ELK处理 SpringBoot 日志,太优雅了!
    • SpringBoot配置数据源
    • Spring Boot 默认数据库连接池 —— HikariCP
    • 数据库连接池Hikari监控
    • Spring Boot中使用AOP统一处理Web请求日志
    • SpringBoot 三大开发工具,你都用过么?
      • 前言
      • 何为热部署?
      • 热部署有啥弊端?
      • 常见的热部署方式
      • spring-boot-devtools简介
      • 实现原理
        • 热部署
      • 演示代码
        • pom.xml
        • Application.java
        • index.html
        • 最终效果
      • 测试用例
      • 小结
    • Spring Boot 3.2 + CRaC = 王炸!
    • springboot启动的时候排除加载某些bean
    • spring boot中集成swagger
    • springboot项目引入这个包以后把原来的json报文改为了xml格式返回
    • SpringBoot中new对象不能自动注入对象和属性的问题
    • 使用 Spring Boot Actuator 监控应用
    • 记录一次springboot自动任务线上突然不执行问题排查过程
    • SpringBoot定时任务@Scheduled源码解析
    • Spring Boot + Lua = 王炸!
    • Spring Boot 实现定时任务动态管理
    • SpringBoot的@Async注解有什么坑?
    • druid 参数配置详解
    • Spring Boot HandlerMethodArgumentResolver 使用和场景
    • SpringBoot数据加解密
    • 解决controller层注入的service为null
    • 在 Spring Boot 中通过 RequestBodyAdvice 统一解码请求体
    • SpringBoot之使用Redisson实现分布式锁(含完整例子)
  • SpringCloudAlibaba

  • Nginx

  • 面试

  • 生产问题

  • 系统设计

  • 消息中间件

  • Java
  • SpringBoot
程序员子龙
2024-01-29
目录

SpringBoot 三大开发工具,你都用过么?

# 前言

平时使用SpringBoot开发应用时,修改代码后需要重新启动才能生效。如果你的应用足够大的话,启动可能需要好几分钟。有没有什么办法可以加速启动过程,让我们开发应用代码更高效呢?今天给大家推荐一款SpringBoot官方的热部署工具spring-boot-devtools,修改完代码后可快速自动重启应用!

# 何为热部署?

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

# 热部署有啥弊端?

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

  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简介

SpringBoot官方开发工具,如果你的应用集成了它,即可实现热部署和远程调试。

# 实现原理

使用该工具应用为什么启动更快了?主要是因为它使用了两种不同的类加载器。基础类加载器用于加载不会改变的类(比如第三方库中的类),重启类加载器用于加载你应用程序中的类。当应用程序启动时,重启类加载器中的类将会被替换掉,这就意味着重启将比冷启动更快!

# 热部署

接下来我们将集成devtools,来演示下热部署功能。

  • 添加devtools的依赖;
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
1
2
3
4
5
  • 由于在项目构建时,devtools才会自动重启项目,而IDEA默认并没有使用自动构建,此时我们可以修改应用启动配置,设置当IDEA失去焦点时自动构建项目;

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

# 演示代码

以下是一个简单的演示代码,用于演示如何使用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>
1
2
3
4
5
6
7
8
9
10
11

# 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);
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 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>
1
2
3
4
5
6
7
8
9
10

# 最终效果

运行应用程序后,在浏览器中访问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!"));
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

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

# 小结

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

上次更新: 2024/03/11, 15:54:57
Spring Boot中使用AOP统一处理Web请求日志
Spring Boot 3.2 + CRaC = 王炸!

← Spring Boot中使用AOP统一处理Web请求日志 Spring Boot 3.2 + CRaC = 王炸!→

最近更新
01
一个注解,优雅的实现接口幂等性
11-17
02
MySQL事务(超详细!!!)
10-14
03
阿里二面:Kafka中如何保证消息的顺序性?这周被问到两次了
10-09
更多文章>
Theme by Vdoing | Copyright © 2024-2024

    辽ICP备2023001503号-2

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式