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

时间:2018-03-05 08:07:37

标签: java spring multithreading event-handling

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

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

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

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

  

一个ThreadPoolExecutor,可以额外安排命令在给定的延迟后运行,或者定期执行

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

答案 2 :(得分:0)

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

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