我正在尝试创建两个单独的freemarker配置实例。我有这样的抽象类
public abstract class AbstractFreemarkerConfiguration {
Logger logger = LoggerFactory.getLogger(AbstractFreemarkerConfiguration.class);
Configuration cfg = new Configuration();
public AbstractFreemarkerConfiguration() throws IOException, TemplateModelException {
logger.info("Initializing Freemarker Config");
cfg.setDefaultEncoding("UTF-8");
setTemplateExceptionHandler();
cfg.setSharedVariable("layout", getLayoutDirectives());
cfg.setTemplateUpdateDelay(0);
cfg.setLocalizedLookup(false);
}
@Autowired
@Qualifier("databaseTemplateLoader")
public void setTemplateLoader(TemplateLoader loader){
logger.info("Setting hibernate teplate loader");
cfg.setTemplateLoader(loader);
}
public abstract void setTemplateExceptionHandler();
}
然后我有两个这样的课程
@Component("freemarkerProcessor")
public class FreemarkerTemplateProcessor extends AbstractFreemarkerConfiguration implements TemplateProcessor {
public FreemarkerTemplateProcessor() throws IOException, TemplateModelException {
super();
}
private Environment process(Object template) {
Writer writer = new NullWriter();
//do stuff
}
@Override
public List<String> getIncludes(Object template) {
//do stuff
}
@Override
public void setTemplateExceptionHandler() {
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
}
}
第二个基本相同,但将模板异常处理程序设置为RETHROW_HANDLER
我的问题是,当我这样做时,在使用IGNORE HANDLER的情况下出现异常,它将通过RETHROW而不是忽略它。
在调试中,我确定必须将Configuration和TemplateExpetionHandler的实例分开,所以我不知道为什么我会收到IGNORE HANDLER的异常。
是否有一些全局的Configuration设置或我不知道的东西?
感谢您的任何回复。
最佳答案
所以我想通了。我有两个春季服务,一个是IGNORE,一个是RETHROW。我从带有RETHROW的那个对象那里获得了freemarker模板对象,并且似乎该模板对象保留了基于原始配置的ExceptionHandler设置。
因此,当我在IGNORE 1中处理来自RETHROW 1的模板时,它仍使用RETHROW,因为该模板来自该配置。
当我从IGNORE 1加载模板时,即使在RETHROW 1上它也一直忽略。
这绝对是我的意外行为。