Spring Boot中的热插拔

 小兔纸77 发布于 2023-01-30 20:36

我一直在用Spring Boot做POC.

到目前为止,它一直很好,很有前途,但有一个主要缺点:我使用的是嵌入式服务器(即将Web应用程序打包在一起.jar),所以在开发时我必须重建jar并每次重新启动服务器更改CSS,HTML或JS文件.没有热插拔.这确实减慢了UI开发速度.

我可以想到几个快速修复,例如从不同的域加载静态资源并从本地提供静态资源nginx,以及更多这样的变体,但是在使用IntelliJ/Eclipse时没有某种类型的内置选项?

7 个回答
  • 有几种选择.在IDE中运行(特别是在调试时)是一种很好的开发方式(所有现代IDE都允许重新加载静态资源,通常还可以热插拔Java类更改).Spring Boot devtools是一种获得相当大提升的廉价方式(只需将其添加到类路径中).它的工作原理是在检测到更改时在热JVM中重新启动应用程序.它还会在运行时关闭像百万美元高速缓存这样的东西,所以你不必记得自己这样做.如果您使用更高级别的工具编写该代码,则可以将其与外部css/js编译器进程一起使用.

    不再推荐使用Spring Loaded,但可能仍在使用中.如果您需要零延迟的热交换(例如JRebel),更复杂的基于代理的工具可以更好地工作.

    查看文档以获取最新内容

    2023-01-30 20:39 回答
  • 在Intellij中,我可以得到这种行为.程序在调试模式下运行时,选择Run > Reload Changed Classes

    注意:在Intellij完成操作后,它可能会说Loaded classes are up to date. Nothing to reload.这是误导性的,因为它实际上是DID重新加载您的类路径资源.

    我的环境/设置包括:
    Intellij 13
    嵌入式Tomcat
    运行/调试配置类型'Application'(它只使用一个主类)
    提供静态html,css和js(没有jsp)

    2023-01-30 20:41 回答
  • 您也可以使用JRebel - 它将重新加载包括spring bean在内的所有更改(更好的hotswap).它很容易与Intellij和Eclipse集成.

    2023-01-30 20:41 回答
  • 但是在使用IntelliJ/Eclipse时是不是有某种内置选项?

    在IntelliJ 15.0,Windows 10中帮助我的是以下顺序:

    第1:在pom中添加了以下依赖项(这在任何地方都有提及但是这个单独的dint解决了它),正如@jonashackt所提到的那样

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

    第2:然后从文件 - >设置 - >构建 - 执行 - 部署 - >编译器(确保选择主编译器选项,而不是其任何子选项)

    启用自动生成项目.单击"确定"并关闭对话框

    步骤3:按住Shift+ Ctrl+ A(在Windows上),您将看到一个标题为"输入操作或选项名称"的搜索对话框,键入registry.双击第一个选项"注册表...",它将打开另一个窗口.寻找以下选项:

    compiler.automake.allow.when.app.running
    

    并启用它,单击关闭

    第4步:重新启动IDE

    从这个来源阐述

    2023-01-30 20:41 回答
  • 假设你正在使用gradle; 在build.gradle中使用以下配置

    apply plugin: 'java'
    apply plugin: 'idea'
    apply plugin: 'spring-boot'
    apply plugin: 'application'
    
    applicationDefaultJvmArgs = ["-agentlib:jdwp=transport=dt_socket,address=localhost:7000,server=y,suspend=n"]
    
    mainClassName = "package.ApplicationRunner"
    

    使用命令从IDE或命令行运行应用程序 gradle build run

    现在,IDE可以连接到运行spring boot应用程序的远程JVM(在端口7000上).它还支持静态文件的热部署.

    如果在IDE中正确管理依赖项,甚至可以从intelliJ运行主类.主类是包含将调用的main方法的类SpringApplication.run("classpath:/applicationContext.xml", args);

    2023-01-30 20:42 回答
  • 你可以进行热交换:

    对于java代码:使用spring-loaded

    对于Thymeleaf模板:禁用缓存

    查看此帖子以查看更多详细信息:http://blog.netgloo.com/2014/05/21/hot-swapping-in-spring-boot-with-eclipse-sts/

    2023-01-30 20:42 回答
  • 我不知道这种支持能走多远,但是如果您使用Eclipse IDE(或任何阅读此书的人):通过m2e在调试模式下启动Spring-Boot应用程序(按“ Debug”-下拉按钮并选择您的Maven运行配置项)。

    它对我来说就像一种魅力。

    我的maven运行配置项配置如下:

    目标设置为“ spring-boot:run”

    基本目录是项目目录

    没有使用任何其他库(甚至没有spring-boot-devtools)。

    而已。

    2023-01-30 20:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有