Не мога да говоря с 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, която вече имате.