Escenario
Lo habré hecho centenares de veces. Desarrollo en local, pruebas y despliegue en remoto. Según el entorno en el que esté corriendo la aplicación, ésta podrá requerir una configuración distinta. Por ejemplo en un entorno de desarrollo querremos tener el caché deshabilitado o el nivel de los registros más bajo que en uno de producción. Spring boot nos permite gestionar las distintas configuraciones usando múltiples ficheros de propiedades. De este modo para las variables específicas de producción podremos usar un application-prod.properties, y para los experimentos en local, application-local.properties. ¿Cómo sabe la aplicación qué fichero ha de cargar? Primero debemos definir la siguiente clave en application.properties:
1 |
spring.profiles.active=${ACME_ACTIVE_ENV} |
Problema
Después de cumplir con los pasos señalados. La aplicación lanza un error cuando invoco cualquiera de sus URLs. En concreto para la página de login, éste:
1 2 3 |
org.thymeleaf.exceptions.TemplateInputException: Error resolving template [security/login], template might not exist or might not be accessible by any of the configured Te> at org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:869) ~[thymeleaf-3.0.15.RELEASE.jar!/:3.0.15.RELEASE] at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:607) ~[thymeleaf-3.0.15.RELEASE.jar!/:3.0.15.RELEASE] |
Solución
En este caso el problema fue provocado por un despiste, ni en la configuración por defecto (application.properties) ni en la cargada por la variable de entorno estaba definido el prefijo de las plantillas de thymeleaf. Tan fácil como añadirlo:
1 |
spring.thymeleaf.prefix=classpath:/templates/ |