spring boot 我们都知道是一个简化配置的服务,省去繁琐的xml配置,以properties和yml还有 注解形式来替代之前的xml配置。
我们首先实现spring boot 对freemarker的支持,引入pom
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
在yml中添加配置项:
spring: freemarker: template-loader-path: classpath:/ftl/
classpath后面为前缀。也可以在注解配置类中实现
新建配置类:FreeMarkerConfig.java
import com.jagregory.shiro.freemarker.ShiroTags; import freemarker.template.TemplateException; import freemarker.template.TemplateModelException; import java.io.IOException; import java.util.Properties; import javax.annotation.PostConstruct; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.ui.freemarker.FreeMarkerConfigurationFactory; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver; /** * @author zhuxiaomeng * @date 2018/1/2. * @email 154040976@qq.com */ @Configuration public class FreeMarkerConfig { @Bean public ViewResolver viewResolver() { FreeMarkerViewResolver resolver = new FreeMarkerViewResolver(); resolver.setCache(false); resolver.setViewClass(org.springframework.web.servlet.view.freemarker.FreeMarkerView.class); resolver.setRequestContextAttribute("re"); resolver.setExposeSpringMacroHelpers(true); resolver.setExposeRequestAttributes(true); resolver.setExposeSessionAttributes(true); resolver.setSuffix(".ftl"); resolver.setContentType("text/html; charset=UTF-8"); return resolver; } @Bean public FreeMarkerConfigurer freemarkerConfig() throws IOException, TemplateException { FreeMarkerConfigurationFactory factory = new FreeMarkerConfigurationFactory(); factory.setTemplateLoaderPaths("classpath:/ftl/", "src/main/resources/ftl"); factory.setDefaultEncoding("UTF-8"); FreeMarkerConfigurer result = new FreeMarkerConfigurer(); freemarker.template.Configuration configuration = factory.createConfiguration(); configuration.setClassicCompatible(true); result.setConfiguration(configuration); Properties settings = new Properties(); settings.put("template_update_delay", "0"); settings.put("default_encoding", "UTF-8"); settings.put("number_format", "0.##########"); settings.put("datetime_format", "yyyy-MM-dd HH:mm:ss"); settings.put("classic_compatible", true); settings.put("template_exception_handler", "ignore"); result.setFreemarkerSettings(settings); return result; } }
setRequestContextAttribute:设置属性名称,为freemarker前端 RequestContext 的别名
本人已经在开源框架lenos中实现,如果你感兴趣,或者需要帮助,可以下载学习:
地址:https://gitee.com/bweird/lenosp
lenos是一款快速开发脚手架,不仅有定时任务,还有权限管理,日志监控等其他技术,如果你喜欢 别忘记点个star,谢谢。如果有疑问,可以在lenos:137738503下加群询问。