如何在Spring Boot 1.5.2中将FreeMarker“DEBUG”模式更改为“RETHROW”模式。发生异常时,我在浏览器中收到以下消息:
FreeMarker template error (DEBUG mode; use RETHROW in production!)
我尝试将以下属性添加到application.properties文件中:
spring.freemarker.template_exception_handler=rethrow
根据以下网站:http://blog.64p.org/entry/2016/03/24/175906 但那没用。
编辑:
我看到有一个名为FreeMarkerProperties的类,其类定义如下:
@ConfigurationProperties(prefix = "spring.freemarker")
public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties {
我认为这个类应该填充所有以“spring.freemarker”
开头的属性它有一个名为getSettings的方法。如果我将FreeMarkerProperties自动装入我的CommandLineRunner,我决定看看返回什么。
我将实现CommandLineRunner的类更改为以下内容:
@Component
public class ApplicationLoader implements CommandLineRunner {
private static final Logger logger = LoggerFactory.getLogger(ApplicationLoader.class);
...
@Autowired
FreeMarkerProperties properties;
@Override
@Transactional
public void run(String... strings) throws Exception {
StringBuilder sb = new StringBuilder();
for (String option : strings) {
sb.append(" ").append(option);
}
sb = sb.length() == 0 ? sb.append("No Options Specified") : sb;
logger.info(String.format("WAR launched with following options: %s", sb.toString()));
logger.info("FREEMARKER PROPERTIES");
for(String path : properties.getTemplateLoaderPath()) {
logger.info(path);
}
for(String setting : properties.getSettings().keySet()) {
logger.info("Freemarker: " + setting);
}
以下输出:
2017-03-22 09:58:19.257 INFO 6635 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-03-22 09:58:19.292 INFO 6635 --- [ main] com.example.ApplicationLoader : WAR launched with following options: No Options Specified
2017-03-22 09:58:19.292 INFO 6635 --- [ main] com.example.ApplicationLoader : FREEMARKER PROPERTIES
2017-03-22 09:58:19.292 INFO 6635 --- [ main] com.example.ApplicationLoader : classpath:/templates/
2017-03-22 09:58:19.852 INFO 6635 --- [ main] com.example.DemoApplication : Started DemoApplication in 11.67 seconds (JVM running for 12.339)
因此,似乎FreemarkerProperties的getSettings方法返回一个空的设置列表。我的application.properties:
# Spring Boot configuration.
# Uncomment below line to enable mobile device detection.
#spring.mobile.devicedelegatingviewresolver.enabled: true
spring.metrics.export.delay-millis=10000
spring.datasource.url=jdbc:postgresql://localhost:5432/**COMMENTED OUT***
spring.datasource.username=*
spring.datasource.password=*
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.hibernate.ddl-auto=create
server.session.timeout=1800
spring.freemarker.template_exception_handler=rethrow
我在这里做错了吗?为什么FreemarkerProperties类中没有填充设置?
答案 0 :(得分:2)
在您的application.properties中尝试使用
spring.freemarker.settings.template_exception_handler=rethrow
答案 1 :(得分:0)
在我的某个应用程序的Spring Boot Module中,我正在使用@PropertySource注释加载Freemarker Properties文件。
@SpringBootApplication
@PropertySource("classpath:/standalone.properties")
public class MailLauncher {
public static void main(String[] args) {
ApplicationContext ctx = new
AnnotationConfigApplicationContext("com.nixmash.blog.mail",
"com.nixmash.blog.jpa");
MailDemo demo = ctx.getBean(MailDemo.class);
demo.init();
((ConfigurableApplicationContext) ctx).close();
}
}
我没有扩展AbstractTemplateViewResolverProperties
,而是使用配置Bean
@Bean
public FreeMarkerViewResolver freemarkerViewResolver() {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
resolver.setPrefix("");
resolver.setCache(false);
resolver.setOrder(3);
return resolver;
}
这是.properties
文件。
spring.freemarker.enabled=false
spring.freemarker.template-loader-path=classpath:/freemarker/
spring.freemarker.charset=UTF-8
spring.freemarker.cache=false
spring.freemarker.check-template-location=false
spring.freemarker.settings.locale=en_US
如果您的应用程序包含多个模块和application.properties
个文件,则可能只需要一个模块.properties
文件覆盖您的FreeMarker模块.properties
文件。在这种情况下,重命名FreeMarker模块.properties
文件并使用@PropertySource
会公开属性。