通过sql过程发生表更新时更新弹簧缓存

时间:2016-12-10 11:58:22

标签: java spring caching stored-procedures ehcache

我有一个带有java 8,jpa等的spring boot应用程序和一个带有j2ee应用程序的jboss应用程序,它们调用太多的sql过程来更新表。

我在春季启动时遇到类似这样的问题,以获取所有员工:

@Cacheable("employeeList")

List{Employee} findByAddressId(Long addressId);

但是如果有人在jboss应用程序的sql procdure中将相同的地址id中的新记录插入到Employee表中,则spring引导应用程序无法选择新记录,因为该查询对于该地址id是如此通用。 / p>

所以我想在插入和更新时在该表上创建一个触发器,所以当插入/更新发生时,它应该更新缓存,新记录属于该地址id。

有人可以告诉我怎么做吗?

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,你有一个spring boot app和一个单独的jboss app,它们连接到同一个数据库并插入/更新到相同的数据库表。

使用spring的@Cachable,您需要能够告诉spring何时应该逐出缓存的项目。例如,使用更新被标记为@CacheEvict的实体的方法是从缓存中逐出实体的简单方法。这里的问题是,如果jboss应用程序更新记录,春季启动应用程序无法知道这一点。

使用数据库触发器似乎有问题,因为您必须以某种方式让db触发器与spring boot应用程序通信以允许驱逐发生。

一个解决方案可能是让jboss和spring boot应用程序都使用分布式缓存,例如带有赤土陶器的ehcache。