Не мога да говоря с MyBatis, но мога да ви кажа, че PostgreSQL има вградена система за публикуване/абониране, която ще ви позволи да правите това с много по-малко хакерство.
Първо настройте тригер за widgets
който се изпълнява при всяка операция за вмъкване, актуализиране и изтриване. Накарайте го да извлече първичния ключ и NOTIFY
widgets_changed, id
. (Е, от PL/pgSQL вероятно бихте искали PERFORM pg_notify(...)
.) PostgreSQL ще излъчи вашето известие, ако и когато тази транзакция се ангажира, правейки както известието, така и съответните промени в данните видими за други връзки.
В клиента бихте искали да стартирате нишка, посветена на поддържането на тази карта актуална. Ще се свърже с PostgreSQL, LISTEN
widgets_changed
за да започнете да поставяте известия в опашка, SELECT * FROM widgets
за да попълните картата и изчакайте да пристигнат известия. (Проверката за известия очевидно включва запитване на JDBC драйвера
, което е гадно, но не е толкова лошо, колкото си мислите. Вижте PgNotificationPoller
за конкретно изпълнение.) След като видите известие, потърсете посочения запис и актуализирайте вашата карта. Имайте предвид, че е важно да LISTEN
преди началния SELECT *
, тъй като записите могат да се променят между SELECT *
и LISTEN
.
Този подход не изисква PostgreSQL да знае нищо за вашето приложение. Всичко, което трябва да направи, е да изпраща известия; вашето приложение ще свърши останалото. Няма скриптове на обвивката, няма HTTP и няма обратни извиквания, което ви позволява да преконфигурирате/преразпределите приложението си, без също така да се налага да преконфигурирате базата данни. Това е просто база данни и може да бъде архивирана, възстановена, репликирана и т.н. без допълнителни усложнения. По същия начин вашето приложение няма допълнителни сложности:всичко, от което се нуждае, е връзка с PostgreSQL, която вече имате.