Saya tidak dapat berbicara dengan MyBatis, tetapi saya dapat memberi tahu Anda bahwa PostgreSQL memiliki sistem publikasi/berlangganan, yang memungkinkan Anda melakukan ini dengan lebih sedikit peretasan.
Pertama, siapkan pemicu di widgets
yang berjalan pada setiap operasi penyisipan, pembaruan, dan penghapusan. Minta untuk mengekstrak kunci utama dan NOTIFY
widgets_changed, id
. (Nah, dari PL/pgSQL, Anda mungkin ingin PERFORM pg_notify(...)
.) PostgreSQL akan menyiarkan pemberitahuan Anda jika dan ketika transaksi itu dilakukan, membuat pemberitahuan dan perubahan data terkait terlihat oleh koneksi lain.
Di klien, Anda ingin menjalankan utas yang didedikasikan untuk menjaga peta ini tetap mutakhir. Itu akan terhubung ke PostgreSQL, LISTEN
widgets_changed
untuk mulai mengantri notifikasi, SELECT * FROM widgets
untuk mengisi peta, dan menunggu pemberitahuan tiba. (Memeriksa notifikasi ternyata melibatkan polling driver JDBC
, yang menyebalkan, tapi tidak seburuk yang Anda bayangkan. Lihat PgNotificationPoller
untuk implementasi nyata.) Setelah Anda melihat pemberitahuan, cari catatan yang ditunjukkan dan perbarui peta Anda. Perhatikan bahwa penting untuk LISTEN
sebelum SELECT *
inisial , karena catatan dapat diubah antara SELECT *
dan LISTEN
.
Pendekatan ini tidak mengharuskan PostgreSQL untuk mengetahui apa pun tentang aplikasi Anda. Yang harus dilakukan hanyalah mengirim pemberitahuan; aplikasi Anda melakukan sisanya. Tidak ada skrip shell, tidak ada HTTP, dan tidak ada panggilan balik, memungkinkan Anda mengonfigurasi ulang/menerapkan ulang aplikasi Anda tanpa juga harus mengonfigurasi ulang database. Ini hanya database, dan dapat dicadangkan, dipulihkan, direplikasi, dll. tanpa komplikasi tambahan. Demikian pula, aplikasi Anda tidak memiliki kerumitan tambahan:yang dibutuhkan hanyalah koneksi ke PostgreSQL, yang sudah Anda miliki.