Several template locations for Thymeleaf in Spring Boot

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


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.