Spring Boot 1.3 引入了 spring-boot-devtools 来提供与 Spring Reloaded 类似的功能,以重新加载修改的类并更新 Thymeleaf 模板,而无需重新运行应用程序。
我之前一直在使用 Spring Boot 1.2.7(带有 Spring Reloaded),并且我能够动态修改我的模板,而无需重新启动我的 Spring Boot 应用程序。
当我修改和保存 Java 代码/ Thymeleaf 模板时,同一应用程序现在既不会重新加载 Thymeleaf 模板,也不会重新加载/重新启动应用程序。
我正在使用 Netbeans 8.0.2 和嵌入在 Netbeans IDE 中的 Maven(版本 3.0.5)。该应用程序打包为 JAR。
在 Netbeans 中,项目属性 -> 构建 -> 编译下有一个“保存时编译”复选框,已勾选。
我通过修改 .java 文件并检查 /target/classes 中的时间戳来验证这实际上是否有效。
这里有Netbeans 中项目的“运行操作”属性: https://i.stack.imgur.com/qZVsa.png
我的 pom.xml 中有以下依赖项(包括其他依赖项,因不相关而被排除):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
有了这个,我就该出发了,因为
Spring Boot 博客提到了以下内容:
“当包含 spring-boot-devtools 模块时,任何类路径文件更改都会自动触发应用程序重新启动。”
并在Spring Boot 官方文档。 http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-hotswapping
编辑:
我尝试使用带有版本标签 1.2.7.RELEASE 的 spring-boot-maven-plugin,并且在保存模板时,我的 Thymeleaf 模板的更改突然在浏览器中可见。看来至少 Thymeleaf 模板的问题不是因为 spring-boot-devtools,而是因为 spring-bot-maven-plugin。
问题可以分为两部分:
1) 如果使用较新版本的 spring-boot-maven-plugin (1.3.0.RELEASE),Thymeleaf 模板将由于某种原因而不会重新加载
2) 即使 /target/classes 中的 .class 文件在修改和保存相应的 .java 文件时更新,应用程序重新加载/重新启动触发器也不会发生。
更新:已验证开发工具未加载(主线程名称未重新启动Main)。
通过将 Netbeans 项目属性中的“运行项目操作”中的“执行目标”更改为以下内容,解决了 2) 问题:
process-classes org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
旧的执行目标是package spring-boot:run
。谷歌搜索了一下发现,当项目使用 spring-boot:run 运行时,其他人遇到了 spring-boot-devtools 的问题。
现在唯一的问题是 Thymeleaf 模板在保存时不会实时更新。