我有一个带有java 8,jpa
等的spring boot应用程序和一个带有j2ee应用程序的jboss
应用程序,它们调用太多的sql过程来更新表。
我在春季启动时遇到类似这样的问题,以获取所有员工:
@Cacheable("employeeList")
List{Employee} findByAddressId(Long addressId);
但是如果有人在jboss应用程序的sql procdure中将相同的地址id中的新记录插入到Employee表中,则spring引导应用程序无法选择新记录,因为该查询对于该地址id是如此通用。 / p>
所以我想在插入和更新时在该表上创建一个触发器,所以当插入/更新发生时,它应该更新缓存,新记录属于该地址id。
有人可以告诉我怎么做吗?
答案 0 :(得分:1)
如果我正确理解了这个问题,你有一个spring boot app和一个单独的jboss app,它们连接到同一个数据库并插入/更新到相同的数据库表。
使用spring的@Cachable,您需要能够告诉spring何时应该逐出缓存的项目。例如,使用更新被标记为@CacheEvict的实体的方法是从缓存中逐出实体的简单方法。这里的问题是,如果jboss应用程序更新记录,春季启动应用程序无法知道这一点。
使用数据库触发器似乎有问题,因为您必须以某种方式让db触发器与spring boot应用程序通信以允许驱逐发生。
一个解决方案可能是让jboss和spring boot应用程序都使用分布式缓存,例如带有赤土陶器的ehcache。