在Spring-boot中只执行一次触发器/任务,并在运行时取消注册任务

时间:2017-02-16 14:30:22

标签: spring spring-boot taskscheduler spring-scheduled

我使用spring boot在我们的应用程序中集成支付模块。我遇到了一个边缘情况,用户在交易过程中关闭了浏览器。

当用户关闭浏览器时,我需要更新状态失败的事务表。但不幸的是,我不能将其作为商家网站的网址。所以当一个条目进入事务表(Hibernate)时,我想到了编写一个触发器(使用Spring引导)。

如果用户在付款时关闭浏览器,触发器应在超时(约30分钟)后更新交易状态。

如果交易成功失败,那么我不想执行触发。

我无法弄清楚如何在Spring-boot中执行此操作,因此我使用了普通的Java timerTask,它将在30分钟后执行一次。使用弹簧靴是否有更好的方法?

new java.util.Timer().schedule( 
            new java.util.TimerTask() {
                @Override
                public void run() {
                    LOGGER.info("Trigger for Transaction id "+transactionId);
                }
            }, 
            1000 * 60 * 30 // 30 mins
    );

1 个答案:

答案 0 :(得分:0)

我想你可能会从错误的角度来看待这个问题。 你正在考虑让收盘成为交易的问题。

为什么不考虑整体悬空交易?有一份工作,每分钟运行一次,并关闭过长的交易吗?

这样,您可以确保所有交易在一定时间内结束。