2013-12-18 25 views
2

我知道很多人只是看着標題就可以解決這個問題,但這對我很重要。當數據庫表發生變化時,對JAVA Web應用程序的暗示

我在那裏我們的Java應用程序應該知道如果在DB改變任何表的要求(我們使用了MySQL)。我現在能想到的最好的方法是,我寫一個觸發器,如果​​表'x'被改變,那麼我在表'Y'中插入一條記錄,表明表'X'被改變。

現在,在我的Java Web應用程序中,我正在考慮通過Quartz調度程序每分鐘運行一個線程來檢查表'y'中是否有任何新記錄,這樣我可以發現表'X'是改變。

這裏是我需要建議的地方。 1)如何編寫sql觸發器在特定表被修改時被觸發? 2)我的老闆告訴我,每分鐘運行一個線程都是一個昂貴的操作。

除了運行線程來查找數據庫中的表是否被更改之外,是否還有其他選擇?

我真的需要找到解決這個問題的任何解決方案。幫助表示讚賞。

更新:

我有兩個Web應用程序說,WA1和WA2兩者共享同一個數據庫中說DBS。如果用戶在WA2中執行操作,則DBS表會被更改(添加新列)。所以,我的WA1應該知道在WA2中執行操作。我想到遵循上面提到的兩點。有沒有更好的方法來做到這一點?

而且任何人都可以給我這得到執行,如果有說MYTBL改變一個表一個MySQL觸發器?

我不斷聽到Java Stored Procedures and Triggers和UTL_HTTP.REQUEST但它是甲骨文。無論如何要在MySQL中實現這一點?

+0

使用而改變你的意思是表結構發生變化即新列添加。或者你的意思是新條目被添加到表 –

+0

通過改變,我的意思是,新列被添加。我不想考慮列是否被修改或刪除。 – chaitanya89

+0

嘗試mysql_proxy ... – Meherzad

回答

0

最簡單的解決辦法是有誰改變MySQL表運行Java應用程序的人。

假設您不能這樣做,您可以閱讀MySQL binary log以查看描述數據庫更改的「事件」,例如表創建操作或對錶數據的更改。你必須經常運行你的線程。也許每隔一小時一次。

+0

謝謝你的答案,但在我的情況下,一個人不會手動更改表,但Web應用程序一樣。請檢查更新。 – chaitanya89

0

好了,我不知道你的要求和DB設計,或者這將是適合你的,但我覺得在WA1任何代碼負責改變你的餐桌,還有本身就可以編寫一些代碼來親密你的WA2添加了哪些列以及添加了哪些表。如果兩個應用程序都使用相同的技術,則可以爲wA2生成一個簡單的請求以相應地執行操作,否則可以使用Web服務。

Edit:數據庫是爲持久存儲和數據庫不推薦用於多個應用之間的通信。對於多個應用程序之間的通信,應使用Web-Services/Rest。

+0

這就是問題的所在,我們有不同的技術兩個Web應用程序,因此我們做了DB作爲這兩個網絡應用程序之間的通信手段。 – chaitanya89

+0

請參閱我的答案中的編輯。 –

0

看一看這個項目: Q4M

這是基於MySQL的 仍處於早期階段,消息引擎,但它應該是足夠好爲你的質量要求。

1

我簡單的解決方案:

  1. 實施那裏每分鐘石英調度工作。注意石英是一個有效的線程池,所以它取決於如何使它不是最便宜。
  2. 在作業,與任何機制可以讓你比較中的列的差異相互覈對的信息架構。希望保持這個以亞秒...

只是我的兩思想美分

+0

+1這是目前我在做什麼,但我需要比正在運行的線程/工作的每一分鐘,所以我可以有可能提高性能的更好方法。我甚至不需要觸發器。有沒有比頻繁運行線程更好的解決方案? – chaitanya89

相關問題