Spring Boot + Jetty和热部署

3
我已经阅读了Spring Boot中的热交换,但没有找到能帮助我情况的内容。
我有一个使用Thymeleaf的内嵌Jetty服务器的Spring Boot应用程序。我的应用程序将提供HTML、CSS、JS(AngularJS)和REST服务。
文件夹结构如下:
/java
   ----
/resources
   /static
       /js
       /css
   /templates (html)

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

但是当我修改css/html/js文件时,它们不能实时更新,每次都需要重新启动服务器。

额外加分项:在页面加载时锁定资源(js),甚至Ant脚本也无法替换它们。

我可以在哪里设置scanIntervalSeconds?

--编辑--

Main.java

@Configuration
@ComponentScan
@EnableJpaRepositories
@EnableAutoConfiguration
@Import({RepositoryRestMvcConfiguration.class, PersistenceConfig.class, ThymeleafConfig.class})
public class Main {

   public static void main(String[] args) throws Exception {
       SpringApplication.run(Main.class, args);
   }
}

我已经通过在IDEA中右键单击类并进行调试来运行它。
3个回答

6

您是如何启动应用程序的?如果您使用带有调试模式的IDE,它应该可以正常工作(除了我认为是Windows操作系统的锁定问题),或者使用“mvn spring-boot:run”或“gradle bootRun”启动它。


谢谢 :-) "mvn spring-boot:run" 已经可以运行了,我该如何在终端中以调试模式运行它? - Reeebuuk
MAVEN_OPTS= -agentlib:jdwp=transport=dt_socket,server=y,address=8000怎么样? - Dave Syer
我已经将它放在Maven->导入->VM选项中,但没有成功。我还是应该用“mvn spring-boot:run”来运行它吗?将服务器更改为本地主机? - Reeebuuk
抱歉,我没听懂。"importer"是什么意思?如果你在命令行上运行,请设置一个环境变量(如建议的那样,使用server=y)。如果您想了解更多关于如何进行远程调试的信息,请搜索“Java 远程调试”。 - Dave Syer
在使用嵌入式Tomcat和FreeMarker时遇到了同样的问题,Dave的解决方案很有效:mvn spring-boot:run - Krešimir Nesek

2

我使用NetBeans 8.0.1进行开发。 我解决了在src/main/resources中不重新加载静态资源(如css(在src/main/resources/resources/css(是的,真的两次“resources”!),html-thymeleaf-templates(在src/main/resources/templates))的问题:

  • 我的Spring Boot Web应用程序是JAR项目(pom.xml)
  • 添加src/main/resources/application.properties:
    • spring.template.cache=false
    • spring.thymeleaf.cache=false
  • 添加自定义maven构建:项目 - 属性 - 自定义... - 目标...
  • 执行目标:spring-boot:run
  • 设置属性:
    • jpda.listen=maven(以调试模式运行)
    • Env.spring.profiles.active=DEV(可选,但我需要它来开发不同的SpringConfig-....properties,在开发、生产等环境中)

只需运行自定义的Maven构建以以调试模式启动Web应用程序。对于Thymeleaf-Templates中的更改(位于src/main/resources/templates中,例如index.html(而不是.xhtml!)),在浏览器重新加载时立即可见。


1
如果你将CSS和JavaScript移动到src/main/java/webapp文件夹下,它应该可以工作。
由于某种原因,在src/main/java/resources下的资源在更改时似乎无法进行热部署。
为了解决这个问题,如上述帖子建议的那样,我在资源文件夹中的Application.properties中添加了以下内容:
- spring.template.cache=false - spring.thymeleaf.cache=false 注意: 我还添加了以下内容作为VM运行时参数:
-javaagent:springloaded-1.2.0.RELEASE.jar -noverify

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接