2017-02-16 13 views
0

Я интегрирую модуль оплаты в нашем приложении, используя весеннюю загрузку. Я застрял в одном из крайних случаев, когда пользователь закрывал браузер во время транзакции.Выполнять триггер/задачу только один раз в задаче Spring-boot и de-register во время выполнения

Когда пользователь закрывает браузер, мне нужно обновить таблицу транзакций со статусом. Но, к сожалению, я не могу, поскольку URL-адрес торгового сайта. Поэтому я думал написать триггер (используя Spring boot), когда запись идет в таблице транзакций (Hibernate).

Триггер должен обновить статус транзакции после таймаута (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 
    ); 

ответ

0

Я думаю, вы можете приблизиться к этому из-за неправильного угла. Вы считаете, что закрытие будет проблемой транзакции.

Почему бы не рассмотреть оборванные транзакции в целом? У вас есть одна работа, которая работает каждую минуту и ​​закрывает слишком длинные транзакции?

Таким образом, вы можете гарантировать, что все транзакции завершены в течение определенного периода времени.

+0

Таким образом, каждое задание мин попадет в БД, чтобы проверить, является ли статус транзакции нулевым или нет, и время транзакции> 30 минут –

+0

Это то, что я бы сделал ... Индексируйте статус транзакции и время, так что это будет легкий запрос. –