【问题标题】:How to constantly check if time is up for auction site如何不断检查拍卖网站的时间是否到了
【发布时间】:2021-03-23 12:05:38
【问题描述】:

我正在开展一个项目,我们正在创建一个每周运行的拍卖网站。计划在周一开始所有拍卖,并在周五结束。

到目前为止,我发现我需要一个保存开始日期和结束日期的数据库,这样我就可以检查剩下多少时间等等。但是我需要能够不断地检查时间是否到了,我不知道如何进行。这样做的正确方法是什么?

我们使用 Java8 和 Spring 并作为前端做出反应。

【问题讨论】:

    标签: java spring-boot


    【解决方案1】:

    两种解决方案:

    1. 使用websocket,服务器设置一个周五到期的定时器,一旦定时器到期,将事件发送给客户端。
    2. 客户端也做定时器。

    【讨论】:

      【解决方案2】:

      这里有 3 层:

      1. 前端(反应)
      2. 后端(Java8/Spring 应用)
      3. 数据库

      现在您需要弄清楚如何在这些层之间传播数据。

      可以使用轮询或 websocket 来完成从后端到前端的传播。

      可以使用轮询或数据库触发器来完成从数据库到后端的传播。

      我个人会通过 websockets 将 React 与 Spring App 连接起来。然后我会有一些后台任务轮询数据库并将发现的更改推送到连接的 websocket 客户端。

      这是 Springs 自己的 websockets 教程https://spring.io/guides/gs/messaging-stomp-websocket/

      【讨论】:

      • 听起来我必须看看 websockets。你有关于如何检查后端时间是否到的提示吗,我有点卡在这个上
      • 结束时间可以改吗?如果不是,那么只需查询一次并签入代码。如果它可以不时轮询它并仍然检查代码。
      • 如果你不想投票,那么你可以查看这个帖子stackoverflow.com/questions/18126178/…
      • 目前不会改变,每周一08点开始,周五12点结束。但可能需要每周更新日期
      【解决方案3】:

      我认为您正在寻找一个拉模型。基本上,您的 Java 应用程序需要以特定的时间间隔从数据库中提取结束日期。您可以为此编写一个 cron 作业。Quartz cron 是目前流行的基于 Java 的框架之一http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html。它也处理分布式系统。因此,如果您的应用程序有多个实例,Quartz 可以为您解决。

      拉模型的另一个变体,您可以在 JVM 本地缓存或其他一些缓存(Redis、Memcache)中读取带有结束日期的条目并在其上运行 cron。但是你必须保持与数据库的缓存一致性。

      您选择哪一个取决于您的业务用例(结束日期更改的频率、您需要检查结束日期的频率等)。

      其他选择是推模式。但是对于这种情况,推送模型不适用于传统数据库。

      【讨论】:

        【解决方案4】:

        可能的选择 - 扩展org.springframework.web.servlet.handler.HandlerInterceptorAdapter
        并在此类中根据您的时间范围编写检查当前时间的逻辑 - 如果检查失败则抛出异常。 潜在的优化 - 从数据库缓存值(至少一段时间,例如 - 15 分钟 - 因为这将有助于减少对数据库的实际调用次数。

        【讨论】:

          猜你喜欢
          • 2011-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多