मैं MyBatis से बात नहीं कर सकता, लेकिन मैं आपको बता सकता हूं कि PostgreSQL में एक पब्लिश/सब्सक्राइब सिस्टम बेक किया हुआ है, जो आपको बहुत कम हैकरी के साथ ऐसा करने देगा।
सबसे पहले, widgets
. पर एक ट्रिगर सेट अप करें जो हर इंसर्ट, अपडेट और डिलीट ऑपरेशन पर चलता है। इसे प्राथमिक कुंजी निकालने के लिए कहें और NOTIFY
widgets_changed, id
. (खैर, PL/pgSQL से, आप शायद PERFORM pg_notify(...)
चाहते हैं .) पोस्टग्रेएसक्यूएल आपकी सूचना प्रसारित करेगा यदि और जब वह लेन-देन करता है, तो अधिसूचना और संबंधित डेटा दोनों अन्य कनेक्शनों के लिए दृश्यमान होते हैं।
क्लाइंट में, आप इस मानचित्र को अप-टू-डेट रखने के लिए समर्पित एक थ्रेड चलाना चाहेंगे। यह PostgreSQL से कनेक्ट होगा, LISTEN
widgets_changed
सूचनाओं की कतार शुरू करने के लिए, SELECT * FROM widgets
मानचित्र को भरने के लिए, और सूचनाओं के आने की प्रतीक्षा करें। (सूचनाओं के लिए स्पष्ट रूप से जाँच करना JDBC ड्राइवर को मतदान करना शामिल है
, जो बेकार है, लेकिन उतना बुरा नहीं जितना आप सोच सकते हैं। देखें PgNotificationPoller
एक ठोस कार्यान्वयन के लिए।) एक बार जब आप एक अधिसूचना देखते हैं, तो संकेतित रिकॉर्ड देखें और अपना नक्शा अपडेट करें। ध्यान दें कि LISTEN
के लिए यह महत्वपूर्ण है आरंभिक SELECT *
. से पहले , चूंकि रिकॉर्ड SELECT *
. के बीच बदले जा सकते हैं और LISTEN
।
इस दृष्टिकोण के लिए आपके आवेदन के बारे में कुछ भी जानने के लिए PostgreSQL की आवश्यकता नहीं है। इसे बस इतना करना है कि सूचनाएं भेजें; आपका आवेदन बाकी करता है। कोई शेल स्क्रिप्ट नहीं है, कोई HTTP नहीं है, और कोई कॉलबैक नहीं है, जिससे आप डेटाबेस को पुन:कॉन्फ़िगर किए बिना अपने एप्लिकेशन को पुन:कॉन्फ़िगर/पुन:नियोजित कर सकते हैं। यह सिर्फ एक डेटाबेस है, और इसका बैकअप लिया जा सकता है, पुनर्स्थापित किया जा सकता है, दोहराया जा सकता है, आदि बिना किसी अतिरिक्त जटिलता के। इसी तरह, आपके एप्लिकेशन में कोई अतिरिक्त जटिलताएं नहीं हैं:इसके लिए केवल PostgreSQL का कनेक्शन चाहिए, जो आपके पास पहले से है।