Spring Boot自动配置为ThyemeLeaf注册的默认模板解析器是基于类路径的,这意味着它从编译的资源/ target / classes / **加载模板和其他静态资源。
要加载对资源(HTML,js,CSS等)的更改,我们可以
- 每次都重新启动应用程序-这当然不是一个好主意!
- 使用IntelliJ上的CTRL + F9或(如果您使用的是eclipse键映射,则使用CTRL + SHIFT + F9)或只是右键单击并单击编译来重新编译资源。
- 或如下所述的更好的解决方案!
Thymeleaf包括一个基于文件系统的解析器,它直接从文件系统中加载模板,而无需通过类路径(已编译资源)。
请参见DefaultTemplateResolverConfiguration#defaultTemplateResolver中的代码段
@Bean public SpringResourceTemplateResolver defaultTemplateResolver() { SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); resolver.setApplicationContext( this .applicationContext); resolver.setPrefix( this .properties.getPrefix());
属性前缀默认为“ classpath:/ template /”。 参见摘要ThymeleafProperties#DEFAULT_PREFIX
public static final String DEFAULT_PREFIX = "classpath:/templates/" ;
解决方案:
Spring Boot允许我们覆盖属性“ spring.thymeleaf.prefix”以指向源文件夹“ src / main / resources / templates /”,而不是默认的“ classpath:/ templates /”。
在application.yml | properties文件中:
spring: thymeleaf: prefix: file:src/main/resources/templates/ #directly serve from src folder instead of target
这将告诉运行时不要查看目标/文件夹。 而且您不需要每次在我们的src / main / resources / template上更新html模板时都重新启动服务器
那么JavaScript / CSS文件呢?
您可以进一步继续更新“ spring.resources.static-locations”以指向您的静态资源文件夹(保存js / css,图像等)
spring:resources:static-locations: file:src/main/resources/static/ #directly serve from src folder instead of target cache:period: 0
完整代码:
好的做法是仅在开发过程中具有上述配置。 要具有生产系统的默认配置,可以使用“个人档案”并为每个环境定义单独的行为。
这是基于我们刚刚描述的完整代码段!
项目结构:
Pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><artifactId>my-sample-app</artifactId><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>11</java.version></properties><dependencies><!-- the basic dependencies as described on the blog --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency></dependencies><build><finalName>${build.profile}-${project.version}-app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><profiles><!-- Two profiles --><profile><id>dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><spring.profiles.active>dev</spring.profiles.active><build.profile>dev<build.profile></properties></profile><profile><id>prod</id><properties><spring.profiles.active>prod</spring.profiles.active><build.profile>prod<build.profile></properties></profile></profiles></project>
属性文件(yml)
application-dev.yml
spring: profiles: active: dev thymeleaf: cache: false prefix: file:src/main/resources/templates/ #directly serve from src folder instead of target resources: static -locations: file:src/main/resources/ static / #directly serve from src folder instead of target cache: period: 0
application-prod.yml(不会覆盖任何内容)
spring: profiles: active: prod
希望这可以帮助!
翻译自: https://www.javacodegeeks.com/2019/04/skip-cache-thyemeleaf-bypass-restarting-server.html