Как проверить, правильно ли завершен код JAVA (который сохраняется в базе данных) или внезапно завершен? - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть служба, которая сохраняет некоторые данные на SQL сервере. 2 из полей, которые я сохраняю, называются

is_valid, что является просто проверкой безопасности, на случай, если нам потребуется аннулировать текущий запуск службы (и любые данные, которые он сохранил в БД) в будущем.

Другим полем является end_execution_time, это время окончания текущей услуги.

Когда я запускаю службу, у меня есть is_valid=0 и end_execution_time=NULL. Когда пробег завершается (успешно), у меня есть is_valid=1 и end_execution_time=GETDATETIME(). Теперь вот мое беспокойство

У меня есть 3 сценария ios, которые могут произойти ->

  1. Сбой при запуске службы. Код знает, что запустить не удалось. Поэтому мы обновляем в БД, что is_valid = 0. end_execution_time остается NULL.
  2. По какой-то причине Run завершается неудачно, и код также перестает работать (что-то вроде Ctrl- C в терминале). is_valid изначально имеет значение 0. оно все еще остается нулевым. end_execution_time остается NULL.
  3. активен некоторый прогон. прямо сейчас is_valid равен 0. end_execution_time равен NULL.

В БУДУЩЕМ, КАК ПРОВЕРИТЬ, СОДЕРЖИТСЯ НЕДОСТАТОЧНО НЕКОТОРЫЙ СЕРВИС, ИЛИ ПРЕКРАТИЛ ПРЕКРАЩЕНО?

Есть нет никакого способа отличить guish между вторым и третьим случаями. Пожалуйста, помогите мне. Я использую Spring-Mybatis и Java / Kotlin

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Программно вы можете поймать, что процесс завершился внезапно или нет. Однако беспокойство вызывает то, что вы имеете дело с тремя государствами. По моему мнению, вам нужно либо промежуточное состояние is_valid и end_time, либо дополнительный столбец в базе данных, который будет определять текущее состояние

Например:

Состояние 1:

            success 

            is_valid = 1

            end_time = time

Состояние 2: неудачно, но процесс не завершился внезапно

          is_valid = 0 

          end_time = null 

Состояние 3: неудачно, но процесс завершился внезапно

          is_valid = -1 // just an example

          end_time = -1  // just an example
0 голосов
/ 07 апреля 2020

Если вы можете изменить сервисный код, вот несколько вещей, которые вы можете сделать, чтобы помочь различить 2-й и 3-й случай.

1) Проверьте наличие длительных вызовов сервисных служб и истекайте их. Предположим, что вызовы в течение некоторого интервала (1 минута?) Мертвы. Реализуйте это, используя время начала и дату.

2) Используйте FINALLY часть try / catch / finally для обновления базы данных при сбоях вызова службы.

3) Выполните вызов службы как вызов службы asyn c, как описано здесь: http://wiki.eclipse.org/Jetty/Feature/Continuations#Jetty_6_Continuations Я знаю, что вы не используете Jetty, но, похоже, вам нужен тайм-аут на вызове службы, который обновляет базу данных.

У меня нет идеи о том, как решить вашу проблему без изменения кода.

Удачи!

...