-
-
Save seanhinkley/6eab2130ceea857c160b to your computer and use it in GitHub Desktop.
spring.thymeleaf.cache=false | |
#idea flags this as invalid.. | |
spring.thymeleaf.mode=HTML | |
...snip... |
package com.boot; | |
import org.springframework.boot.autoconfigure.SpringBootApplication; | |
import org.springframework.boot.SpringApplication; | |
//make sure spring boot doesn't attempt 2.1 config | |
@SpringBootApplication(exclude={org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration.class} ) | |
public class AppApplication { | |
public static void main(String[] args) { | |
SpringApplication.run(AppSecurityApplication.class, args); | |
} | |
} |
<!-- use snapshot build --> | |
<repositories> | |
<repository> | |
<id>sonatype-nexus-snapshots</id> | |
<name>Sonatype Nexus Snapshots</name> | |
<url>https://oss.sonatype.org/content/repositories/snapshots</url> | |
<snapshots> | |
<enabled>true</enabled> | |
</snapshots> | |
</repository> | |
</repositories> | |
<dependencies> | |
<!-- make sure you've removed this. | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-thymeleaf</artifactId> | |
</dependency> | |
--> | |
<dependency> | |
<groupId>org.thymeleaf</groupId> | |
<artifactId>thymeleaf</artifactId> | |
<version>3.0.0-SNAPSHOT</version> | |
<scope>compile</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.thymeleaf</groupId> | |
<artifactId>thymeleaf-spring4</artifactId> | |
<version>3.0.0-SNAPSHOT</version> | |
</dependency> | |
</dependencies> | |
#resources/META-INF/spring.factories | |
#bootstrap in your thymeleaf 3 config | |
org.springframework.boot.autoconfigure.EnableAutoConfiguration=somewhere.outside.app.namespace.thymeleaf.ThymeleafConfig |
package somewhere.outside.app.namespace.thymeleaf; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.boot.autoconfigure.AutoConfigureAfter; | |
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | |
import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties; | |
import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; | |
import org.springframework.boot.context.properties.EnableConfigurationProperties; | |
import org.springframework.context.ApplicationContext; | |
import org.springframework.context.ApplicationContextAware; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.context.annotation.Configuration; | |
import org.springframework.web.servlet.ViewResolver; | |
import org.thymeleaf.TemplateEngine; | |
import org.thymeleaf.spring4.SpringTemplateEngine; | |
import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver; | |
import org.thymeleaf.spring4.view.ThymeleafViewResolver; | |
import org.thymeleaf.templateresolver.ITemplateResolver; | |
@Configuration | |
@ConditionalOnClass({SpringTemplateEngine.class}) | |
@EnableConfigurationProperties({ThymeleafProperties.class}) //no sense rolling our own. | |
@AutoConfigureAfter({WebMvcAutoConfiguration.class}) | |
public class ThymeleafConfig implements ApplicationContextAware { | |
private ApplicationContext applicationContext; | |
@Autowired | |
private ThymeleafProperties properties; | |
public void setApplicationContext(ApplicationContext applicationContext) { | |
this.applicationContext = applicationContext; | |
} | |
@Bean | |
public ViewResolver viewResolver() { | |
ThymeleafViewResolver resolver = new ThymeleafViewResolver(); | |
resolver.setOrder(2147483642); | |
resolver.setTemplateEngine(templateEngine()); | |
resolver.setCharacterEncoding("UTF-8"); | |
return resolver; | |
} | |
@Bean | |
//made this @Bean (vs private in Thymeleaf migration docs ), otherwise MessageSource wasn't autowired. | |
public TemplateEngine templateEngine() { | |
SpringTemplateEngine engine = new SpringTemplateEngine(); | |
engine.setTemplateResolver(templateResolver()); | |
return engine; | |
} | |
private ITemplateResolver templateResolver() { | |
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); | |
resolver.setApplicationContext(applicationContext); | |
resolver.setPrefix(this.properties.getPrefix()); | |
resolver.setSuffix(this.properties.getSuffix()); | |
resolver.setTemplateMode(this.properties.getMode()); | |
resolver.setCacheable(this.properties.isCache()); | |
return resolver; | |
} | |
} |
@zhugw I'd suggest we still need this option:
spring.thymeleaf.mode=HTML
as the option HTML5
is depreceted in v3.0.0
and will be removed in v3.1
.
If you found those default values in org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties
, which I checked as well in Spring Boot v1.5.4
, the mode
field is currently set to HTML5
, and I assume it came from Thymeleaf 2. If you're not going to customize auto-configuration class ThymeleafAutoConfiguration
to change the default value of it to HTML
, you cannot but use the application property above to change it manually. Technically the default value HTML5
stands still for the legacy compatibility and is supposed work exactly same to HTML
, so keeping it won't cause any problem for now. But it's RECOMMENDED to change it.
Reference
I believe it's easier then that options:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-use-thymeleaf-3
Spring boot 1.5.4 replace default 2.1.5 thymeleaf with 3.0.6
pom.xml
just need use 3.0.6's dependency override default version, I have proved it works.