我一直在用Spring Boot做一个P.O.C.
到目前为止,它一直非常好,很有前景,但有一个主要缺点:我使用的是嵌入式服务器(即将网页应用打包在.jar
中),所以在开发时我必须重建每次我更改CSS,HTML或JS文件时,jar并重新启动服务器。没有热插拔。这确实减慢了UI开发速度。
我可以想到几个快速修复,例如从其他域加载静态资源并从本地nginx
提供静态资源,以及更多这样的变体,但是没有内置选项使用IntelliJ / Eclipse时有些什么?
答案 0 :(得分:22)
有几种选择。在IDE中运行(特别是在调试时)是一种很好的开发方式(所有现代IDE都允许重新加载静态资源,通常还可以热插拔Java类更改)。 Spring Boot devtools是一种获得相当大提升的廉价方式(只需将其添加到类路径中)。它的工作原理是在检测到更改时在热JVM中重新启动应用程序。它还会在运行时关闭像百万美元高速缓存这样的东西,所以你不必记得自己这样做。如果您使用更高级别的工具编写该代码,则可以将其与外部css / js编译器进程一起使用。
不再推荐使用Spring Loaded,但可能仍在使用中。如果您需要零延迟的热插拔(例如JRebel),更复杂的基于代理的工具可以更好地工作。
请参阅docs了解最新内容
答案 1 :(得分:7)
你可以进行热交换:
查看此信息以查看更多详情:http://blog.netgloo.com/2014/05/21/hot-swapping-in-spring-boot-with-eclipse-sts/
答案 2 :(得分:6)
但在使用IntelliJ / Eclipse时,是否有某种内置选项?
在IntelliJ 15.0(Windows 10)中帮助我的是以下序列:
第1步:在pom中添加了以下依赖项(这在任何地方都有提及但是这个单独的dint解决了它),如@jonashackt所述
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
第2步:然后从文件 - >设置 - &gt;构建 - 执行 - 部署 - &gt;编译器(确保选择主编译器选项而不是其任何子选项)
启用自动生成项目。单击“确定”并关闭对话框
第3步:按住 Shift + Ctrl + A (在Windows上)您将看到一个搜索对话框标题为&#34;输入操作或选项名称&#34;,键入注册表。双击第一个选项&#34; Registry ...&#34;它会打开另一个窗口。寻找以下选项:
compiler.automake.allow.when.app.running
并启用它,点击关闭
第4步:重启IDE
从此source
中阐述答案 3 :(得分:5)
您也可以使用JRebel - 它将重新加载包括spring bean在内的所有更改(更好的hotswap)。它很容易与Intellij和Eclipse集成。
答案 4 :(得分:5)
假设你正在使用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"
使用命令gradle build run
现在,IDE可以连接到运行spring boot应用程序的远程JVM(在端口7000上)。它还支持静态文件的热部署。
如果在IDE中正确管理依赖项,甚至可以从intelliJ运行主类。主类是包含调用SpringApplication.run("classpath:/applicationContext.xml", args);
答案 5 :(得分:5)
在Intellij中,我可以得到这种行为。当程序在调试模式下运行时,请选择Run > Reload Changed Classes
注意:Intellij完成操作后,可能会说Loaded classes are up to date. Nothing to reload
。这是误导性的,因为它实际上是DID重新加载你的类路径资源。
我的环境/设置包括:
Intellij 13
嵌入式Tomcat
“应用程序”类型的运行/调试配置(仅使用主类)
提供静态html,css和js(没有jsp)
答案 6 :(得分:5)
我不知道这种支持有多远,但是如果您使用Eclipse IDE(或任何阅读此内容的人):在调试模式下通过m2e启动Spring-Boot应用程序(按“调试” - 下拉按钮并选择你的maven运行配置项。)
它对我来说就像一个魅力。
我的maven run配置项配置如下:
我没有使用任何其他库(甚至不是spring-boot-devtools)。
就是这样。
答案 7 :(得分:3)
尝试在pom.xml中使用这个spring-boot-devtools标记
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
答案 8 :(得分:2)
我推荐Thymeleaf(模板引擎),jRebel for personal developer。 Thymeleaf模板文件只是HTML资源。因此,在编辑模板文件后,它们会立即更改。
答案 9 :(得分:1)
从1.3.0开始。 (现在在Milestone 2中),你可以使用spring-boot-devtools作为lightweigt方法 - 参见docs或this blogpost。 只需升级到&gt; = 1.3.0。并将以下内容添加到您的pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
比使用Run As启动SpringBootApplication ...你很好。
答案 10 :(得分:0)
如果您正在使用maven,那么pom.xml中的spring-boot-maven-plugin必须像这样才能获得热插拔:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
</dependencies>
</plugin>
如果您使用百里香,请将其添加到您的应用程序属性中:
spring.thymeleaf.cache=false
但请记住:不要在生产环境中使用它。
答案 11 :(得分:0)
如何在Springboot应用程序中执行热交换
使用gradle时,在依赖项中包括以下内容:
compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '2.0.1.RELEASE'
和providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
在 application.properties 中添加属性spring.devtools.restart.additional-paths=.
构建Gradle,然后以bootRun运行应用程序
应用程序准备好在修改类时执行热交换