Spring Boot 配置与 Thymeleaf 缓存

2020/11/17 20

Spring

在开发 Spring Boot + Thymeleaf 应用时,除非重启应用程序,否则对 Thymeleaf 模板的变更是不会生效的。这是因为 Thymeleaf 模板默认被缓存。这有助于改善应用程序的性能,因为模板只需要编译一次,但是在开发期间,你就不能看到实时变更的效果了。

spring.thymeleaf.cache 设置为 false 就能禁用 Thymeleaf 模板缓存。在命令行里运行应用程序时,将其设置为命令行参数即可:

$ java -jar readinglist-0.0.1-SNAPSHOT.jar --spring.thymeleaf.cache=false

如果,你希望每次运行时都禁用缓存,可以在 application 配置中定义它:

spring:
  thymeleaf:
    cache: false

一定要确保这个文件不会被发布到生产环境,否则生产环境的应用程序将无法享受模板缓存所带来的性能提升。

作为开发者,在修改模板时始终关闭缓存是最为方便的,为此,可以通过环境变量来禁用 Thymeleaf 缓存:

$ export spring_thymeleaf_cache=false

在 Windows 中你可以使用可视化操作,也可以使用 PowerShell 操作环境变量:

$env:spring_thymeleaf_cache = "false"

**注意:**这仅仅只对当前 PowerShell 会话有用,要想添加到系统级别的,请使用管理员身份运行 PowerShell 并输入:

[System.Environment]::SetEnvironmentVariable('spring_thymeleaf_cache', 'false', [System.EnvironmentVariableTarget]::User)

添加完成后请重新打开 PowerShell,使用命令尝试获取环境变量,如果能成功获取,则说明配置环境变量成功。

$env:spring_thymeleaf_cache

当然你也可是使用 CMD,但是 CMD 已经过时了,且不在维护:

set spring_thymeleaf_cache=false

实际上,Spring Boot 应用程序有多种设置途径,Spring Boot 能从多种属性原获得属性,包括如下:

  1. 命令行参数
  2. java:comp/env 里的 JNDI 属性
  3. JVM 系统属性
  4. 操作系统环境变量
  5. 随机生成的带 random.* 前缀的属性(在设置其它属性时,可以引用它们,比如 ${random.long})
  6. 应用程序意外的 application.properties 或者 application.yml 文件
  7. 打包在应用程序内的 application.properties 或者 application.yml 文件
  8. 通过 @PropertySource 标注的属性源
  9. 默认属性

这个列表按照优先级排序,也就是说,任何高优先级的属性会覆盖低优先级的相同属性。例如,命令行参数会覆盖其它属性源里的属性。

application.properties 和 application.yml 文件能放在以下 4 个位置:

  1. 外置,在相对于应用程序运行目录的 /config 子目录里。
  2. 外置,在应用程序运行的目录里。
  3. 内置,在 config 包内。
  4. 内置,在 Classpath 根路径

同样,这个列表也按照优先级排序。