在固定时间后对实体执行操作

问题描述 投票:0回答:3

在我的Spring项目中,我有一个实体Customer。现在,一旦我们得到一个新客户,我们将其保留在我们的系统中,并且在一小时之后,我想检查Customer是否已经进行了任何购买。如果是,我会采取一些行动。如果不是,其他一些。

我考虑了两种策略,1)在客户持久化时启动事件。然后让事件监听器线程休眠一小时。我相信这将是一个非常糟糕的方法来处理这个问题。

2)对于自注册一小时后已经过去的客户,每隔一段时间进行一次cron检查。但是,我认为要准确起来将非常困难。我必须每分钟运行一次这不会很棒的cron。

有任何想法吗?

java spring multithreading event-handling
3个回答
0
投票

您可以使用'ScheduledThreadPoolExecutor',根据javadoc:

ThreadPoolExecutor,可以额外调度命令在给定延迟后运行,或定期执行

在您的情况下,创建客户时,您可以使用“计划”方法在1小时后唤醒,然后执行所需的活动。如果您希望定期执行这些活动,也可以使用此方法。


0
投票

我相信每分钟运行cron并不是那么糟糕,你会在一分钟内处理多少客户?


0
投票

虽然不确定为什么您不能在注册客户进行任何购买时使用该事件,即当特定注册客户购买时您可以采取内联行动然后进行。

您描述了两种策略都可以工作,但我更喜欢运行可以明确配置的cron作业。这样就可以避免维护线程的开销。如果正确配置cron作业计时并允许单个作业一次运行,我没有看到任何问题。请记住,cron作业用于批处理而不是处理事件。

© www.soinside.com 2019 - 2024. All rights reserved.