【问题标题】:Spring - Getting notified on DB changesSpring - 收到有关数据库更改的通知
【发布时间】:2015-11-25 08:10:17
【问题描述】:

用例:我的 spring 应用程序从 DB 读取数据,但访问预加载的相同缓存。尽管很少,这些表可能会发生变化。在这种情况下,缓存需要失效并预加载。也不是应用程序只读取数据。

经过一番研究,我找到了两个选择..

选项 1:数据库触发器调用 Spring 任务。

我需要在每个应该调用 spring @Scheduled 任务的表的插入/更新时配置触发器。这将负责刷新缓存。但是如何在数据库触发器上调用 Spring 的 @Scheduled 任务呢?

选项 2:使用 Oracle 的 DatabaseChangeNotification

我必须向 Oracle DB 注册一个侦听器。这将监听所有更改,并且只要有更改,我的应用程序就会收到通知。但是,我该如何使用 Spring 来做到这一点?

哪个是更好的选择?有更好的选择吗?在进一步处理选项方面还有什么帮助吗?

注意:我使用的是 Spring + JPA + Oracle 10g

【问题讨论】:

  • 你最终选择了什么?
  • @sawe 我想不出一个好的解决方案。我最终每天午夜进行刷新。数据库很小——我负担得起

标签: database spring oracle spring-cache


【解决方案1】:

我知道这个问题已有六年历史了,但是由于我遇到了同样的问题,所以我想我可能会建议一个选项:

许多数据库(在我的用例中是 MySQL)都具有为各种目的创建和执行 UDF(用户定义函数)的能力。

https://dev.mysql.com/doc/extending-mysql/8.0/en/adding-functions.html

可以这样使用: Calling an url from a trigger in mysql

如果您要添加一个 UDF,该 UDF 调用在您的应用程序中公开的 Spring 端点,您可以使用对该端点的调用来触发刷新。

工艺流程,从上到下: DB UDF 触发对特定表的 CRUD 操作,调用 Spring 端点,触发刷新。

【讨论】:

    猜你喜欢
    • 2017-04-10
    • 2014-04-10
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多