2011-11-10 73 views
7

我寫了一個Java應用程序,應該在數據庫中發生「某事」時啓動或喚醒它。例如,插入到用戶表中應該觸發發送通常的歡迎,密碼......郵件。postgresql - java - 在數據庫中發生某些事情時喚醒應用程序

這樣做的最佳做法是什麼?我可以寫我的應用程序,使得它執行下面的查詢讓我們說每一秒鐘:

select mail from user where mail_sent = false 

但是,這是投票了,我想,以避免它。有沒有辦法啓動或喚醒我的Java應用程序(推送)由數據庫中的更改發起?

乾杯!

+0

重要信息:我只希望Java應用程序的一個單一實例。所以如果兩個用戶相繼添加,我不想讓第二個實例啓動。也就是說,這些操作由單個實例按順序處理。 –

回答

2

看看NOTIFY

+1

非常有用。根據http://jdbc.postgresql.org/documentation/83/listennotify.html,一個缺點似乎是我們仍然需要POLL:「JDBC驅動程序的一個關鍵限制是它無法接收異步通知,並且必須輪詢後端檢查是否發出任何通知。「這裏的'後端'是什麼意思?我們是每x秒查詢一次數據庫還是訪問內存中的JDBC後端? –

+2

是的,後端表示數據庫。是的,聽衆偶爾會查詢數據庫,看看是否收到通知。如果你想要實際的異步事件,你可以看看Firebird。 –

+1

根據pgsql的文檔,它們是異步的。只有JDBC驅動程序具有不支持異步更新的限制。我想,這可能是他們路線圖上的一項工作。 –

3

觸發的PostgreSQL可以在主機的語言,除這是PL/Java編寫。您可以在需要此監視的表上爲相關操作(插入,刪除,更新...)設置觸發器並讓觸發器處理通知。它可能需要某種形式的進程間通信,但是如果觸發器和客戶端都是用Java編寫的,那不應該太困難。

0

我不認爲有可能啓動一個應用程序。但是,當您運行應用程序時,該應用程序可以訂閱以偵聽事件。您可以使用觸發器爲某些操作發佈(通知)事件。

當應用程序被通知事件時,它可以響應某些操作。請參閱postgresql site for an example

+0

在代碼中的多個位置偵聽多個事件時,幫助器實現非常有用。感謝那! –

相關問題