У меня есть template_update_delay = 24h для кэширования шаблонов в течение 24 часов. Если мой URLTemplateLoader получает IOException из-за временного простоя (http-статус 429), то freemarker.cache.TemplateCache вызовет storeNegativeLookup и также кэширует исключение.
cachedTemplate.templateOrException = e
// Template source was removed
if (!newLookupResult.isPositive()) {
if(debug) {
LOG.debug(debugName + " no source found.");
}
storeNegativeLookup(tk, cachedTemplate, null);
return null;
}
private void storeNegativeLookup(TemplateKey tk,
CachedTemplate cachedTemplate, Exception e) {
cachedTemplate.templateOrException = e;
cachedTemplate.source = null;
cachedTemplate.lastModified = 0L;
storeCached(tk, cachedTemplate);
}
Позже, даже если конечная точка URL активна и доступна, freemarker.cache.TemplateCache: getTemplate () будет продолжать выбирать cachedTemplate с IOException и будет перебрасывать исключение до тех пор, пока не истечет срок действия кэша.
else if(t instanceof IOException) {
rethrown = true;
throwLoadFailedException((IOException)t);
}
Это все время вызывает сбой приложения ((.
Как заставить Freemarker повторить выборку шаблона из источника вместо кэша, если в прошлый раз произошла исключительная ситуация?