Freemarker多个配置实例

时间:2014-04-10 13:09:35

标签: java spring freemarker

我正在尝试创建两个单独的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);
}

}

和第二个基本相同,但将Template Exception Handler设置为RETHROW_HANDLER

我的问题是,当我这样做并且在IGNORE HANDLER的那个中我会遇到异常,它将通过RETHROW而不是忽略它。

在调试中我确定我必须分离Configuration和TemplateExpetionHandler的实例,所以我不知道为什么我会使用IGNORE HANDLER获得异常。

是否存在一些全局性的配置设置或我不了解的内容?

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

所以我想出来了。我有两个春季服务,一个是IGNORE,另一个是RETHROW。我用RETHROW从那个获得了freemarker模板对象,似乎模板对象根据原始配置保持ExceptionHandler设置。

因此,当我在IGNORE中处理来自RETHROW的模板时,它仍然使用RETHROW,因为该模板来自该配置。

当我从IGNORE加载模板时,它甚至在RETHROW上都忽略了。 这对我来说绝对是出乎意料的行为。