Spring Boot

[Spring Boot] Thymeleaf 경로 변경 & 다중 경로 설정

jimkwon 2022. 8. 11. 11:21
반응형

이 포스팅은 타임리프 템플릿 엔진 사용 시, html등의 파일을 프로젝트 '내부'가 아닌 '외부' (ex. C드라이브)에 두고 관리할 수 있는 방법을 다룬다.

 

 

 Thymeleaf 경로 변경

 

 

별도의 설정이 없다면, 기본 경로는 src/main/resources/templates 로 설정된다.

만약 기본 경로값을 바꾸고 싶다면, application.properties 파일에서 간단하게 변경 가능하다.

 

spring.thymeleaf.prefix=classpath:/other-template/

 

위와 같이 설정하게 되면, 경로는 src/main/resources/other-template 폴더 안에 들어간 html파일을 기본 경로로 읽을 것이다.

 

 

 Thymeleaf 다중 경로 설정

 

만약, 기존의 경로를 유지하면서 새로운 경로를 추가하고 싶다면?

 

ClassLoaderTemplateResolver 타입의 빈을 생성한 후 등록하면 가능하다!

 

@Bean
public ClassLoaderTemplateResolver secondaryTemplateResolver() {
    ClassLoaderTemplateResolver secondaryTemplateResolver = new ClassLoaderTemplateResolver();
    secondaryTemplateResolver.setPrefix("other-template/");
    secondaryTemplateResolver.setSuffix(".html");
    secondaryTemplateResolver.setTemplateMode(TemplateMode.HTML);
    secondaryTemplateResolver.setCharacterEncoding("UTF-8");
    secondaryTemplateResolver.setOrder(1);
    secondaryTemplateResolver.setCheckExistence(true);
        
    return secondaryTemplateResolver;
}

setPrefix : src/main/resources 아래의 새로운 경로를 추가해준다.

 

이제 타임리프 엔진이 src/main/resources/templates 과 src/main/resources/other-template 두 가지의 경로를 사용할 수 있게 되었다.

 

 

 

 

 Thymeleaf 외부 경로 설정

 

프로젝트 내부가 아닌 C 드라이브와 같이 외부 경로로 설정하는 방법도 있다.

필자의 경우, 이메일 템플릿 엔진을 따로 외부 폴더를 두고 관리하고 싶었기 때문에 해당 방법을 유용하게 사용했다.

 

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.templateresolver.FileTemplateResolver;

@Configuration
public class ThymeleafExtension {

    @Autowired
    private SpringTemplateEngine templateEngine;

    @PostConstruct
    public void extension() {
        FileTemplateResolver resolver = new FileTemplateResolver();
        resolver.setPrefix("C:\\template\\");
        resolver.setSuffix(".html");
        resolver.setTemplateMode("HTML5");
        resolver.setOrder(templateEngine.getTemplateResolvers().size());
        resolver.setCacheable(false);
        templateEngine.addTemplateResolver(resolver);
    }
}

FileTemplateResolver를 사용하여 템플릿을 외부 파일에서 탐색 가능하도록 했다.

필자의 경우 C드라이브 아래 template폴더에 html파일을 두어 관리했다.

 

Error resolving template [hello], template might not exist or might not be accessible
 by any of the configured Template Resolvers

 

 

타임리프를 사용하다보면 위의 에러를 참 많이 마주친다.. 대부분 경로 설정이 잘못됐거나 컨트롤러에서 해당 파일의 확장자 (.html)까지 붙여서 생기는 경우가 많으니 잘 살펴보시길 바란다.

(특히! src/main/resources 해당 경로 아래에 넣지 않아서 생기는 오류가 많다)

 

 

 

 

 

 

 

참고 링크

 

https://www.baeldung.com/spring-thymeleaf-template-directory

 

Changing the Thymeleaf Template Directory in Spring Boot | Baeldung

Learn about Thymeleaf template locations.

www.baeldung.com