【SpringBoot无需重启修改代码页面生效】SpringBoot热部署

前言

在实际开发中,我们使用SpringBoot进行开发的时候,需要频繁启动tomcat服务器,每次修改一次代码就需要重启一次,这使得我们的开发效率收到严重影响。

市面上的热部署插件有很多,下面介绍两种比较常用的热部署插件:

1. 使用maven引入dev-tools依赖

步骤:
第一步:在maven的配置文件pom.xml中引入dev-tools的依赖

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional> <!-- 可选 -->
        </dependency>

另外,需要在pom.xml中添加相关插件的支持

  <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

第二步:打开项目自动构建设置
可以使用Ctrl+Alt+S打开setting
File – > setting – > Build,Execution,Deployment–> Compiler
在这里插入图片描述

第三步:勾选compiler.automake.allow.when.app.running
CTRL+shift+Alt+/ 选择 Registry 选中打勾 “compiler.automake.allow.when.app.running” :

在这里插入图片描述

在这里插入图片描述

第四步:开启IDEA热部署策略
在这里插入图片描述

找到SpringBoot->Running Application Update Policies
在这里插入图片描述

第三步:关闭浏览器缓存
network->disabled cache
在这里插入图片描述
测试:

  1. 在Product 类中定义了toStrting()方法,启动tomcat服务器,观察控制台打印的日志
@Component
//prefix绑定到application.yml文件中的product对象,进行属性的注入
@ConfigurationProperties(prefix="product")
@PropertySource({"classpath:application.yaml"})
//JSR303数据校验
@Validated
public class Product {

//    自定义提示信息
    @Email(message="邮箱格式有误")
    private String myEmail;

    /**
     * 注意:依赖注入一定要getter和setter
     */
    private Double totalPrice;
    private String name;

    @Override
    public String toString() {
        return "Product{" +
                "myEmail='" + myEmail + '\'' +
                ", totalPrice=" + totalPrice +
                ", name='" + name + '\'' +
                '}';
    }

    public String getmyEmail() {
        return myEmail;
    }

    public void setmyEmail(String myEmail) {
        this.myEmail = myEmail;
    }

    public Double getTotalPrice() {
        return totalPrice;
    }

    public void setTotalPrice(Double totalPrice) {
        this.totalPrice = totalPrice;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

controller类

    @Autowired
    Product product;

   @RequestMapping("/demo1")
    public String sayHello1(){
        System.out.println(product);
        return "demo!!";
    }

在浏览器访问controller的url,打印控制台
在这里插入图片描述

如果我们要修改Product的代码,无需刷新,因为我们已经启动了热部署

修改Product类的toString()方法

  @Override
    public String toString() {
        return "Product123{" +
                "myEmail='" + myEmail + '\'' +
                ", totalPrice=" + totalPrice +
                ", name='" + name + '\'' +
                '}';
    }

在浏览器中访问路径/demo1,对应的控制台打印修改过后的日志信息
在这里插入图片描述

注意:使用dev-tools会有以下缺点:

  • 在发布项目到生产环境的时候,如果将dev-tools一同打包,会给服务器带来不必要的开销,线上环境不需要dev-tools
  • 对于新增的方法或者在新增的方法上进行修改是不生效的,只有在启动项目之前的方法或者代码上修改才生效
  • 对于JRebel而言,dev-tools热部署的速度相对慢

一般建议使用JRebel插件,无需打包到线上,并且速度更快

2.JRebel插件

详细的教程请看右边的博客:https://blog.csdn.net/lianghecai52171314/article/details/105637251
注意IDEA版本问题!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你好!关于Spring Boot热部署和手动重启的问题,我可以给你一些建议。通常情况下,Spring Boot支持热部署,可以在开发过程中实时更新代码无需手动重启应用程序。但有时候可能会遇到需要手动重启两次才能生效的情况。 首先,你可以尝试以下几个步骤来解决这个问题: 1. 确保你的应用程序启用了热部署功能。在Spring Boot的开发环境中,可以通过在`pom.xml`文件中添加以下依赖来实现: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> ``` 2. 确保你的IDE(如IntelliJ IDEA或Eclipse)已经正确配置了自动编译和重新加载功能。这样当你修改代码后,IDE会自动编译并重新加载应用程序。 3. 清理IDE和构建工具(如Maven或Gradle)生成的临时文件和缓存。有时这些文件可能会导致问题,删除它们可以帮助解决一些奇怪的行为。 4. 如果以上步骤都没有解决问题,你可以尝试手动重启应用程序两次来确保更新生效。这可能是因为某些原因第一次重启时没有完全生效,第二次重启可以让更新生效。 另外,你还可以尝试使用Spring Boot热部署插件,如Spring Loaded或JRebel,来提高热部署的性能和可靠性。这些插件可以在不重启应用程序的情况下实时加载更新的代码。 希望以上建议能帮助到你!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值