Spring Boot 1.5.2 FreeMarker 从 DEBUG 模式更改为 RETHROW 模式
Spring Boot 1.5.2 FreeMarker change from DEBUG mode to RETHROW mode
如何在 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 的 class 具有如下 class 定义:
@ConfigurationProperties(prefix = "spring.freemarker")
public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties {
我认为这个 class 应该填充以 "spring.freemarker"
开头的所有属性
它有一个名为 getSettings 的方法。如果我将 FreeMarkerProperties 自动连接到我的 CommandLineRunner,我决定看看 returns 是什么。
我将实现 CommandLineRunner 的 class 更改为以下内容:
@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 方法 returns 是一个空的设置列表。我的 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 class?
在我的一个应用程序的 Spring 引导模块中,我正在加载带有 @PropertySource 注释的 Freemarker 属性文件。
@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
将公开属性。
在你的 application.properties 中尝试使用
spring.freemarker.settings.template_exception_handler=rethrow
如何在 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 的 class 具有如下 class 定义:
@ConfigurationProperties(prefix = "spring.freemarker")
public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties {
我认为这个 class 应该填充以 "spring.freemarker"
开头的所有属性它有一个名为 getSettings 的方法。如果我将 FreeMarkerProperties 自动连接到我的 CommandLineRunner,我决定看看 returns 是什么。
我将实现 CommandLineRunner 的 class 更改为以下内容:
@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 方法 returns 是一个空的设置列表。我的 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 class?
在我的一个应用程序的 Spring 引导模块中,我正在加载带有 @PropertySource 注释的 Freemarker 属性文件。
@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
将公开属性。
在你的 application.properties 中尝试使用
spring.freemarker.settings.template_exception_handler=rethrow