需要重新启动 tomcat 以进行 html 更改

Need restart tomcat for html changes

我正在 运行 tomcat 8 项目中使用 eclipse。我正在使用 Spring MVC + Thymeleaf。我在 Gradle 中有 war 插件,所以每次我更改 java class 时,它会自动创建新的 WAR 文件并将其部署在 tomcat.

问题是当我更改 HTML 文件时,我必须重新启动 tomcat 才能看到更改。另一个使用 JSF 的项目没有发生的事情,如果我更改 xhtml,我可以看到新的东西只是刷新浏览器。

问题是,每次更改 HTML 或 CSS 文件时,是否都必须重新启动 Tomcat?这对我来说没有意义。

配置模板引擎时需要禁用缓存

<bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
    ...
    <property name="cacheable" value="false"/>
</bean>

让我知道这是否适合你

尝试exploded war。如果您使用 .war 文件,则需要为每次更改重新部署(据我所知)。

问题是 Thymeleaf 缓存。您可以使用 setCacheable 在配置中禁用它。这对 Thymeleaf 3+ 有效:

@Bean
public ViewResolver viewResolver() {
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setTemplateEngine(templateEngine());
    viewResolver.setCharacterEncoding(UTF8);
    return viewResolver;
}

private TemplateEngine templateEngine() {
    SpringTemplateEngine engine = new SpringTemplateEngine();
    engine.setEnableSpringELCompiler(true);
    engine.setTemplateResolver(templateResolver());
    return engine;
}

private ITemplateResolver templateResolver() {
    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
    resolver.setApplicationContext(applicationContext);
    resolver.setPrefix("/WEB-INF/templates/");
    resolver.setSuffix(".html");
    resolver.setTemplateMode(TemplateMode.HTML);
    resolver.setCharacterEncoding("UTF-8");
    resolver.setCacheable(false);
    return resolver;
}

我在 answer 的 Spring 引导线程中找到了这个。