herau
herau

Reputation: 1516

Several template locations for Thymeleaf in Spring Boot

Currently Spring Boot allow one value for the Thymeleaf templates location with the spring.thymeleaf.prefix property.

The default value is classpath:/templates/.

I want to have another location for the thymeleaf templates (but keep the default one), outside the jar, for example:

spring.thymeleaf.prefix = classpath:/templates/, file:/resources/templates

Do i have to define another template resolver for the new location i want ?

Upvotes: 9

Views: 11177

Answers (2)

rajadilipkolli
rajadilipkolli

Reputation: 3601

Define the setting in the application.properties file

spring.thymeleaf.templateResolverOrder=1 

Now in your custom Bean which creates ITemplateResolver set order to 0 along with prefix and suffix. This way spring boot will listen to both places

Setting order to 0 is important

An example of bean creation can be

@Bean
public ClassLoaderTemplateResolver emailTemplateResolver() {
    ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
    emailTemplateResolver.setPrefix("mails/");
    emailTemplateResolver.setSuffix(".html");
    emailTemplateResolver.setTemplateMode(TemplateMode.HTML);
    emailTemplateResolver.setCharacterEncoding("UTF-8");
    emailTemplateResolver.setOrder(0);
    emailTemplateResolver.setCheckExistence(true);

    return emailTemplateResolver;
}

MyExample

Upvotes: 10

injavawetrust
injavawetrust

Reputation: 31

In order to define multiple template locations, you must define Spring beans implementing ITemplateResolver.

@Bean
public SpringResourceTemplateResolver firstTemplateResolver() {
    SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
    templateResolver.setPrefix("classpath:/templates/templatelocation/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode(TemplateMode.HTML);
    templateResolver.setCharacterEncoding("UTF-8");
    templateResolver.setOrder(0);
    templateResolver.setCheckExistence(true);

    return templateResolver;
}

@Bean
public ClassLoaderTemplateResolver secondTemplateResolver() {
    ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
    templateResolver.setPrefix("templates/templatelocation/other/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode(TemplateMode.HTML);
    templateResolver.setCharacterEncoding("UTF-8");
    templateResolver.setOrder(1);
    templateResolver.setCheckExistence(true);

    return templateResolver;
}

You can also check out the blog post detailing the usage.

Upvotes: 3

Related Questions