【问题标题】:Default Spring Boot Thymeleaf configuration location默认 Spring Boot Thymeleaf 配置位置
【发布时间】:2020-12-12 14:19:45
【问题描述】:

我已经使用 JSP 很久了,但直到现在我才尝试 Thymeleaf。我发现对于我的应用程序,我需要对我的 application.properties 文件添加一些调整,并且我已经找到了要使用的 Spring Boot Thymeleaf 设置。

但是我在哪里可以找到 Spring Boot 默认使用的 Thymeleaf 设置的权威完整列表?例如,我知道 Spring Boot 将 Thymeleaf 配置为在类路径上的 /templates/ 目录中查找模板,并且我知道如何更改它。但是默认的/templates/ 是在哪里配置的呢?是否有 DefaultXXX 类或 .properties 文件我可以打开以查看它们是如何设置的以及如果我不做任何更改使用什么值?

【问题讨论】:

    标签: java spring-boot thymeleaf


    【解决方案1】:

    有一个属性设置列表here - 您可以在该页面上搜索“thymeleaf”以找到相关部分。

    例子:

    Key                      Default Value          Description
    spring.thymeleaf.prefix  classpath:/templates/  Prefix that gets prepended to view names when building a URL.
    

    此示例显示,对于 Thymeleaf ClassLoaderTemplateResolver,使用默认值 /templates/(如您所述)。

    我不知道它是否是权威的完整列表 - 但它看起来相当全面,基于我通常期望在非 Spring Thymeleaf 实现中设置的设置。


    更新

    要添加更多细节,请查看文档中的两个示例:

    示例 1: spring.thymeleaf.cache - 默认为 true

    对于这个值,默认在AbstractConfigurableTemplateResolver类中定义:

    public static final boolean DEFAULT_CACHEABLE = true;
    

    这是source code on GitHub的链接。

    示例 2: spring.thymeleaf.prefix - 默认为 classpath:/templates/

    在这种情况下,有一个 Spring 类可以处理这个(以及许多其他)默认值:org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties

    跳到straight to the source 并查看那里设置的默认值可能是最简单的。

    例如prefix example:

    public static final String DEFAULT_PREFIX = "classpath:/templates/";
    

    还值得注意的是,上面示例 1 中的 cache 设置也在 Spring ThymeleafProperties 类中显式设置。

    附加说明

    还有一些用于响应式设置的属性:

    spring.thymeleaf.reactive.max-chunk-size - 默认为0B

    这是在嵌套的Reactive 类中设置的:

    private DataSize maxChunkSize = DataSize.ofBytes(0);
    

    以上位置仍不是 100% 全面。例如:

    spring.thymeleaf.enable-spring-el-compiler 根据文档设置为false。而且在源代码中它是隐含的错误:

    private boolean enableSpringElCompiler;
    

    但这并不能告诉您可能的编译器设置是什么,如果您选择将此属性设置为true(请参阅here)。

    关于属性文件的说明

    我不知道有任何默认属性文件或属性文件模板用作此 Thymeleaf 配置过程的一部分。我的理解是,如果你想自定义这些设置,而你还没有 Spring 属性文件,你必须自己创建它——但我可能弄错了。


    附加说明 2

    DEFAULT_PREFIX 为例:这是由ThymeleafAutoConfiguration 类(here)处理的。这会在 SpringResourceTemplateResolver 类中设置前缀,该类是 Thymeleaf 的 Spring 集成模块的一部分(来源 here)。

    resolver.setPrefix(this.properties.getPrefix());
    

    这个解析器“使用 Spring 的资源解析机制解析模板”——这是我的研究停滞不前的地方。

    关于默认前缀和spring.thymeleaf.prefix提供的值之间的关系,我看到直接连接的唯一位置是here,它调用PropertyResolver方法返回用户提供的属性值,或者否则为默认值,否则。但同样,这只是为了验证模板是否可以被定位(而不是实际被检索)——所以这肯定不是全部情况。同样,这是我的研究停滞不前的地方。

    【讨论】:

    • 但是它们在源代码中的定义在哪里?当然,Spring Boot 和/或 Thymeleaf 不会下载您在构建过程中提到的 HTML 页面以用作定义文件。当然,这些价值观来自某个地方。我能找到.properties 文件吗?定义这些的类?源头在哪里?
    • 根据您的 cmets 更新了更多注释。
    • 感谢您扩展您的答案,但这并没有很好地说明问题。我们以DEFAULT_PREFIX 为例。当然,我可以看到 Spring 定义了一个名为 DEFAULT_PREFIX 的常量变量。但是那个默认的设置在哪里呢?例如,仅仅因为我定义了一个名为DEFAULT_VELOCITY 的变量,并不意味着该常量可以在任何地方设置。这是在哪里应用的? Spring实际上在哪里将该值设置为默认值?换句话说,我在哪里可以看到DEFAULT_PREFIXspring.thymeleaf.prefix 有任何关系?
    • 这些问题很有趣,我的回答是:我不知道。我的答案中最新的附加说明对于完整的答案是必要的(我认为),但显然还不够。我怀疑我比你学到的更多——对此感到抱歉。
    猜你喜欢
    • 2015-11-03
    • 2018-09-24
    • 2017-01-29
    • 2020-11-14
    • 2017-07-13
    • 1970-01-01
    • 2016-11-07
    • 2019-08-16
    • 2017-09-15
    相关资源
    最近更新 更多