2016-12-10 36 views
0

我有一個彈簧啓動應用程序與Java 8,jpa等和jboss應用程序與j2ee應用程序調用太多的SQL過程來更新表。當通過sql過程發生表更新時更新彈簧緩存

我有一個查詢這樣的事情在春天開機讓所有員工:

@Cacheable("employeeList") 

List{Employee} findByAddressId(Long addressId); 

但是,如果有人插入一條新記錄到Employee表從SQL procdure同一地址的ID從JBoss應用中,春季啓動應用程序無法挑選新記錄,因爲該查詢對於該地址標識非常通用。

所以我想在插入和更新的表上創建一個觸發器,所以當插入/更新發生時,它應該更新緩存與新的記錄屬於該地址ID。

有人可以告訴我該怎麼做嗎?

回答

1

如果我正確地理解了這個問題,你有一個彈簧啓動應用程序和一個單獨的jboss應用程序連接到同一個數據庫,並插入/更新到相同的數據庫表。

隨着spring的@Cachable,你需要能夠告訴春天什麼時候你應該驅逐緩存的物品。例如,讓更新被標記爲@CacheEvict的實體的方法是從緩存中驅逐實體的簡單方法。這裏的問題是,如果jboss應用程序更新記錄,則Spring Boot應用程序無法知道這一點。

使用數據庫觸發器似乎有問題,因爲你必須以某種方式讓db觸發器與spring啓動應用程序通信以允許驅逐發生。

一個解決方案可能是讓jboss和spring啓動應用程序使用分佈式緩存,就像ehcache和兵馬俑一樣。

+0

感謝John的回覆,我想使用ehcache,但它不會是實時數據,因爲他們必須等到我們在ehcache timetolive中設置的時間,糾正我,如果我錯了,並與兵馬俑可以你請詳細說明一下,我不知道那個?如何使用使用觸發器來更新說「事件表」來知道要刷新哪個緩存,並使用一些機制來刷新特定的緩存。 –