gpt4 book ai didi

spring - 根据日期列更新数据库记录

转载 作者:行者123 更新时间:2023-11-29 13:19:14 26 4
gpt4 key购买 nike

我正在开发一个应用程序,其中我在数据库中有一些实体,其中有一列表示该特定实体可用于某些操作之前的日期。当它过期时,我需要更改它的状态,这意味着更新代表它状态的列。

到目前为止,我在做什么,每当我向数据库请求这些实体对它们执行某些操作时,我首先检查它们是否未过期,如果已过期,我会更新它们。我不是特别喜欢这种方法,因为这意味着我将在数据库中拥有一堆处于错误状态的记录,只是因为我没有查询它们。另一种方法是让一个周期性任务运行这些记录并在必要时更新它们。我也不喜欢,因为我的记录会处于不一致状态,在这种情况下,第一种方法似乎更合理。

还有另一种方法吗,我错过了什么吗?我需要提一下,我的应用程序使用 spring-boot + hibernate。底层数据库是 Postgresql。我可以使用任何技术特定技巧来获得我想要的东西吗?

最佳答案

在数据库中没有触发器类型过期。如果你有一些过期的东西并且你应该做一些事情有两个解决方案(你已经写过):在你使用数据之前做一些额外的过期,和一些cron/task(它可能在数据库级别或服务器上边)。我建议你使用 cron 方法。这是解释:在获取数据之前对过期做一些事情:

选择前更新

+:您在需要之前更新过期数据,这里有一些问题 - 仅更新您请求的或所有过期的...如果从所有记录中您只需要 2 条记录并更新,则更新所有可能会消耗时间2000 条与您的工作数据集无关的记录。

-: 长时间更新所有记录;如果数据库是共享的——不仅你的应用程序可以访问数据库,与过期相关的逻辑也不会被执行(如果你有这种情况);你需要控制入口点,你应该在什么地方处理过期的事情,什么地方不应该做;如果时间在 min 秒内过期 - 那么即使在执行过期逻辑之后,下一秒新记录也可能过期;此外,如果您需要更新过期数据处理的工作流逻辑,则需要将其保存在一个 plase 中 - 在 cron 中,在在选择之前进行更新的情况下,您也应该更新已更改的逻辑。

计划/任务

-:你应该花时间配置一次最多 30-60 分钟:);+:在后台执行;如果您的数据库不仅被您的应用程序使用,过期数据逻辑也可用;您不必检查(也不必记住它,也不必为新员工解释......)在选择某些内容之前,您的 Java 代码中是否有任何陈旧的数据;您确实在关心过时数据和正常查询之间拆分逻辑。您可以在 cron 中执行“select for update”,即使您在服务器端查询的更新时间内进行了选择,您也会等待陈旧的数据逻辑完成,然后您会选择最新的数据

Spring : spring scheduling documentation , simple example spring-quartz-schedule

用于数据库级别的 postgresql 作业调度器

scheduler/cron 是此类事情的最佳实践

关于spring - 根据日期列更新数据库记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44785031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com