Ich habe eine Spring-Boot-Anwendung, die eine API zum Rendern einer relativ einfachen Geschwindigkeitsvorlage zur Verfügung stellt. Die Vorlage verwendet #parse
, um einige andere Vorlagen einzuschließen, und schreibt ansonsten einige Basisvariablen aus der Java-Ebene aus. Die Vorlagen befinden sich in der JAR-Datei und werden daher aus dem Klassenpfad geladen. Ich verwende die folgende Geschwindigkeit Motor-Setup, das on-the-fly-per-Anfrage erstellt wird:Apache Velocity deaktivieren Vorlage & Ressourcen-Caching
VelocityEngine ve = new VelocityEngine();
ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
ve.setProperty("classpath.resource.loader.cache", "false");
ve.setProperty("velocity.engine.resource.manager.cache.enabled", "false");
ve.setProperty("resource.manager.cache.enabled", "false");
ve.init();
Mehrere Teile der Vorlage sollen pro Anforderung eindeutig sein (die Ressource als Antwort auf eine einfache Feder verwendet wird MVC-Controller), daher muss ich das Zwischenspeichern der Vorlagenressourcen deaktivieren. Ich habe die obige Konfiguration ausprobiert, wie es ist, und es in einer velocity.properties
Datei definieren, die in src/main/resources
ist, aber das Ändern der Vorlage oder der Dateien wird nicht wirksam, bis ich die Anwendung neu starte.
Doing was this documentation Seite sagt, scheint nicht zu helfen (in der Tat können Sie sehen, was es oben tut).
Der Motorcode oben ist in einer Spring Component
Klasse und selbst wenn die VelocityEngine
Sachen zu einem statischen Endfeld bewegen und nur die Geschwindigkeit Kontext jedes Mal zu initialisieren hat nicht geholfen.
Wie kann Spring/Velocity zum Laden von Vorlagen & enthaltene Ressourcen jedes Mal erzwingen?
Sind die VelocityEngine-Instanzen threadsafe? Würde eine statische Referenz funktionieren? –
Ja, Velocity ist Thread-sicher. Aber im Gegensatz zu meinem kleinen Beispiel oben ist der VelocityContext nicht und muss wieder instanziiert werden. –
Ja, ich halte jetzt einen 'statischen finalen' Verweis auf die 'VelocityEngine' -Instanz und erzeuge den 'VelocityContext' in der Methode, die die Vorlagen zusammenführt. Wird in Kürze testen und akzeptieren. Vielen Dank! –