Thymeleaf依赖版本:
org.springframework.boot
spring-boot-starter-thymeleaf
2.7.14
Thymeleaf属性:
@Data
@ConfigurationProperties(prefix = "template.thymeleaf")
public class ThymeleafProperties {
/** 是否开启 */
private Boolean enable;
/** 模版解析 */
private List templateResolvers;
@Data
static class TemplateResolver {
/** 前缀 */
private String prefix;
/** 后缀 */
private String suffix;
/** 模版模式 */
private String templateMode;
/** 是否开启 */
private Set resolvablePatterns;
/** 是否缓存 */
private Boolean cacheable = false;
/** 顺序 */
private Integer order;
}
}
Thymeleaf自动配置:
@EnableConfigurationProperties({ ThymeleafProperties.class })
@Configuration
public class ThymeleafAutoConfiguration {
private static final String FILE_PREFIX = "file:";
@Bean(name = "thymeleafTemplateEngine")
@ConditionalOnProperty(prefix="template.thymeleaf", name = "enable", havingValue = "true", matchIfMissing = false)
public SpringWebFluxTemplateEngine thymeleafTemplateEngine(ThymeleafProperties thymeleafProperties) {
SpringWebFluxTemplateEngine templateEngine = new SpringWebFluxTemplateEngine();
Set templateResolvers = new HashSet<>();
if (null == thymeleafProperties || null == thymeleafProperties.getTemplateResolvers()) {
templateResolvers.add(templateResolver(0, "/templates/", ".html", TemplateMode.HTML,
new HashSet<>(Arrays.asList("html/*", "*/html/*")), true));
templateResolvers.add(templateResolver(1, "/templates/", ".xml", TemplateMode.XML,
new HashSet<>(Arrays.asList("xml/*", "*/xml/*")), true));
templateResolvers.add(templateResolver(2, "/templates/", ".txt", TemplateMode.TEXT,
new HashSet<>(Arrays.asList("text/*", "*/text/*")), true));
} else {
thymeleafProperties.getTemplateResolvers().forEach(templateResolver -> {
templateResolvers.add(templateResolver(templateResolver.getOrder(), templateResolver.getPrefix(),
templateResolver.getSuffix(), TemplateMode.parse(templateResolver.getTemplateMode()),
templateResolver.getResolvablePatterns(), templateResolver.getCacheable()));
});
}
templateEngine.setTemplateResolvers(templateResolvers);
return templateEngine;
}
@Bean(name = "thymeleafTemplateService")
@ConditionalOnProperty(prefix="template.thymeleaf", name = "enable", havingValue = "true", matchIfMissing = false)
public TemplateService thymeleafTemplateService(TemplateEngine thymeleafTemplateEngine) {
return new ThymeleafTemplateServiceImpl(thymeleafTemplateEngine);
}
private ITemplateResolver templateResolver(int order, String prefix, String suffix, TemplateMode templateMode,
Set resolvablePatterns, boolean cacheable) {
AbstractConfigurableTemplateResolver templateResolver =
prefix.startsWith(FILE_PREFIX) ? new FileTemplateResolver() : new ClassLoaderTemplateResolver();
templateResolver.setOrder(order);
templateResolver.setPrefix(prefix.startsWith(FILE_PREFIX) ? prefix.substring(FILE_PREFIX.length()) : prefix);
templateResolver.setSuffix(suffix);
templateResolver.setTemplateMode(templateMode);
templateResolver.setResolvablePatterns(resolvablePatterns);
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setCacheable(cacheable);
return templateResolver;
}
}
spring.factories配置:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.component.template.config.ThymeleafAutoConfiguration
配置文件配置:
template:
thymeleaf:
enable: true
template-resolvers:
- prefix: "/template/"
suffix: ".html"
templateMode: HTML
resolvablePatterns:
- "html/*"
- "*/html/*"
cacheable: true
order: 0
- prefix: "/template/"
suffix: ".xml"
templateMode: XML
resolvablePatterns: ["xml/*","*/xml/*"]
cacheable: true
order: 1
- prefix: "file:D:/template/"
suffix: ".html"
templateMode: HTML
resolvablePatterns:
- "html/*"
- "*/html/*"
cacheable: true
order: 2