【问题标题】:update a spring cache when a table update happens through sql procedure当通过 sql 过程发生表更新时更新弹簧缓存
【发布时间】:2017-04-25 19:23:49
【问题描述】:

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

我在 Spring Boot 中有一个类似这样的查询来获取所有员工:

@Cacheable("employeeList")

List{Employee} findByAddressId(Long addressId);

但是,如果有人从 jboss 应用程序的 sql procdure 中将新记录插入到 Employee 表中的相同地址 id 中,则 Spring Boot 应用程序无法选择新记录,因为该查询对于该地址 id 非常通用。

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

谁能告诉我怎么做?

【问题讨论】:

    标签: java spring caching stored-procedures ehcache


    【解决方案1】:

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

    使用 spring 的 @Cachable 你需要能够告诉 spring 你什么时候应该驱逐缓存的项目。例如,使用更新标记为@CacheEvict 的实体的方法是从缓存中逐出实体的简单方法。这里的问题是,如果 jboss 应用程序更新了一条记录,那么 spring boot 应用程序就无法知道这一点。

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

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

    【讨论】:

    • 感谢John回复,我想用ehcache,但它不是实时数据,因为他们必须等到我们在ehcache中设置的时间,如果我错了,请纠正我,关于兵马俑,你能详细说明一下吗,我不知道吗?如何使用触发器来更新“事件表”以知道要刷新哪个缓存,并使用某种机制仅刷新特定缓存。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多