2015-03-13 20 views
0

我有一個需求,我需要在Web應用程序中的表中捕獲插入行事件,以通知用戶關於添加了最新記錄的信息。如何將數據庫插入行事件捕獲到使用Spring web mvc構建的Web應用程序中?

方案

申請A1不斷抽記錄到數據庫D1。網絡應用程序W1應通知插入數據庫的任何新記錄D1

Web應用程序是使用spring-web-mvc,JPA持久性開發的。我研究了使用由jpa和hibernate提供的entitylistner事件的選項,但是這限制瞭如果同一個應用程序執行插入操作,情況並非如此。

難道你有人請幫助我,我怎麼解決這個問題?

+0

哪個數據庫?說Postgres – 2015-03-13 17:09:00

+0

在我的情況下它的MySql – pavan 2015-03-13 18:21:57

回答

2

根據您的要求,有很多方法可以實現您想要的。

由於您沒有提供具體的要求,所以我只想談談如何實現它。

1.使用數據庫觸發器:您可以將一個觸發器添加到有問題的表中。當D1向此表中插入記錄時,可以使用插入觸發器將記錄的ID添加到通知表中。您的應用程序W1可能有一個計劃任務從通知中讀取記錄。假設它每5秒運行一次並檢查是否有新記錄。如果是這樣,它讀取它們處理它們,然後從通知中刪除它們。

2.使用隊列:如果只能通過應用程序D1將記錄插入問題表中,所以應用程序D1是此表中記錄的唯一入口點,則使用消息隊列。當D1插入新記錄時,將帶有插入記錄詳細信息的消息發送到消息隊列。應用程序W1只是這個隊列的一個用戶。一旦記錄到達,W1將從隊列中讀取它們並處理它們。

3.使用Web服務::如果記錄只能通過D1插入,那麼W1可能會暴露Web服務,以便在創建記錄時通知Web服務。因此,當D1創建新記錄時,它也可以調用此Web服務,並讓W1知道插入了新記錄,而W1可以相應地執行。

而且可能有很多更多的選擇。

+0

謝謝你的確切答案,這是有幫助的。在我的研究中,我遇到了數據庫觸發器。你有什麼想法,觸發器是否可以直接調用Web應用程序?,我聽說過觸發器調用一個Java程序。採用這種方法,可以避免在服務器端編寫調度器。 – pavan 2015-03-13 19:49:35

+0

@pavan我會考慮一個直接觸發Web應用程序的觸發器,這真是個壞主意。使用Spring [設置時間表任務](http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#scheduling-annotation-support)可能要簡單得多。 – 2015-03-13 21:07:34

+0

我同意你的看法,但仍然很想知道是否真的有可能從觸發器直接與Web應用程序交談? – pavan 2015-03-16 09:38:22

相關問題