我有一个带有 java 8 、jpa
等的 Spring Boot 应用程序和一个带有 j2ee 应用程序的 jboss
应用程序,它调用了太多的 sql 过程来更新表。
我在 Spring Boot 中有一个类似这样的查询来获取所有员工:
@Cacheable("employeeList")
List{Employee} findByAddressId(Long addressId);
但是,如果有人通过 jboss 应用程序的 sql 过程将新记录插入到 Employee 表中的同一地址 id 中,则 Spring Boot 应用程序将无法选择新记录,因为查询对于该地址 id 来说非常通用。
所以我想在插入和更新时在该表上创建一个触发器,因此当发生插入/更新时,它应该使用属于该地址 ID 的新记录更新缓存。
有人可以告诉我该怎么做吗?
最佳答案
如果我正确理解了这个问题,那么您有一个 Spring Boot 应用程序和一个单独的 jboss 应用程序,它们连接到同一数据库并插入/更新到相同的数据库表。
使用spring的@Cachable,你需要能够告诉spring何时应该驱逐缓存的项目。例如,将更新实体的方法标记为 @CacheEvict 是从缓存中逐出实体的简单方法。这里的问题是,如果 jboss 应用程序更新了一条记录,Spring Boot 应用程序就无法知道这一点。
使用数据库触发器似乎有问题,因为您必须以某种方式让数据库触发器与 Spring Boot 应用程序通信以允许发生驱逐。
一种解决方案可能是让 jboss 和 spring boot 应用程序都使用分布式缓存,例如带有 terracotta 的 ehcache。
关于java - 当通过sql过程发生表更新时更新spring缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41075259/