Nemohu mluvit s MyBatis, ale mohu vám říci, že PostgreSQL má zapečený systém publikování/odběru, který by vám to umožnil s mnohem menším množstvím hackerů.
Nejprve nastavte spouštěč pro widgets
který běží při každé operaci vložení, aktualizace a odstranění. Nechejte extrahovat primární klíč a NOTIFY
widgets_changed, id
. (No, z PL/pgSQL byste pravděpodobně chtěli PERFORM pg_notify(...)
.) PostgreSQL bude vysílat vaše oznámení, pokud a kdy dojde k potvrzení transakce, takže oznámení i odpovídající změny dat budou viditelné pro ostatní připojení.
V klientovi byste chtěli spustit vlákno věnované udržování této mapy aktuální. Připojilo by se k PostgreSQL, LISTEN
widgets_changed
chcete-li začít řadit oznámení do fronty, SELECT * FROM widgets
vyplňte mapu a počkejte na doručení oznámení. (Kontrola oznámení zřejmě zahrnuje dotazování ovladače JDBC
, což je na hovno, ale není to tak špatné, jak si možná myslíte. Viz PgNotificationPoller
pro konkrétní implementaci.) Jakmile uvidíte upozornění, vyhledejte uvedený záznam a aktualizujte svou mapu. Pamatujte, že je důležité LISTEN
před počáteční SELECT *
, protože záznamy lze měnit mezi SELECT *
a LISTEN
.
Tento přístup nevyžaduje, aby PostgreSQL věděl něco o vaší aplikaci. Jediné, co musí udělat, je posílat upozornění; vaše aplikace udělá zbytek. Neexistují žádné skripty shellu, žádný HTTP a žádná zpětná volání, což vám umožňuje překonfigurovat/znovu nasadit vaši aplikaci, aniž byste museli překonfigurovat databázi. Je to jen databáze a lze ji zálohovat, obnovovat, replikovat atd. bez dalších komplikací. Podobně vaše aplikace nemá žádné extra složitosti:vše, co potřebuje, je připojení k PostgreSQL, které již máte.