Postgres-Trigger zum Aktualisieren des Java-Cache
Ich habe eine Java-Webanwendung (WAR für Tomcat bereitgestellt), die einen Cache verwaltet (Map<Long,Widget>
) in Erinnerung. Ich habe eine Postgres-Datenbank, die a enthältwidgets
Tabelle:
widget_id | widget_name | widget_value
(INT) (VARCHAR 50) (INT)
Zur O / R Karte zwischenWidget
POJOs undwidgets
Tabelleneinträge verwende ich MyBatis. Ich möchte eine Lösung implementieren, bei der der Java-Cache (die Karte) in Echtzeit aktualisiert wird, wenn ein Wert in derwidgets
Tabellenänderungen. ichkönnte Haben Sie eine Polling-Komponente, die die Tabelle alle 30 Sekunden überprüft, aber Polling fühlt sich hier einfach nicht als die richtige Lösung an. Also hier ist was ich vorschlage:
run_cache_updater()
)Die Prozedur führt abwechselnd ein Shell-Skript aus (run_cache_updater.sh
)Das Skript base-64 kodiert das Geändertewidgets
Zeichnen Sie den verschlüsselten Datensatz auf und wandeln Sie ihn in eine HTTP-URL umDas Java WAR hat ein Servlet, das die cURLed-URL überwacht und alle verarbeitetHttpServletRequests
geschickt, um es. Es Base-64 dekodiert den Datensatz und wandelt ihn irgendwie in einWidget
POJO.Der Cache (Map<Long,Widget>
) wird mit dem richtigen Schlüssel / Wert aktualisiert.Diese Lösungfühlt sich Umständlich, und deshalb frage ich mich zuerst, wie ein Java / Postgres-Guru da draußen mit einer solchen Situation umgehen würde. Ist Umfragen hier die bessere / einfachere Wahl (bin ich nur stur?) Gibt es eine andere / bessere / bessere Standardlösung, die ich übersehen habe?
Wenn nicht, und diese Lösung ist die Standardmethode zum Übertragen geänderter Datensätze von Postgres in die Anwendungsebene. Dann wird erstickt, wie der Auslöser, die gespeicherte Prozedur und das Shell-Skript so geschrieben werden, dass das gesamte Skript übertragen wirdwidgets
Datensatz wird an die cURL-Anweisung übergeben. Vielen Dank im Voraus für jede Hilfe hier.