2022. 8. 11. 11:21ㆍSpring Boot
이 포스팅은 타임리프 템플릿 엔진 사용 시, 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
'Spring Boot' 카테고리의 다른 글
Spring Security @EnabledWebSecurity 의 동작원리 (0) | 2024.06.17 |
---|---|
[Spring Boot] 이메일 보내기 (3) - html 템플릿 적용 (feat. Thymeleaf) (0) | 2022.08.11 |
[Spring Boot] 이메일 보내기 (2) - 참조(cc), 첨부 파일 (8) | 2022.08.10 |
[Spring Boot] SMS 전송 - NAVER SMS API 연동 (16) | 2022.08.10 |
[Spring Boot] File Upload & Download (2) - ORACLE DB 연동 (0) | 2022.08.05 |