Spring with Camunda - DB не обновляется при перезапуске, если процесс настроен с помощью bean-компонентов - PullRequest
1 голос
/ 21 апреля 2020

У меня есть процесс Camunda, который запускается периодически каждые 15 минут, который настроен с использованием выражения CRON. Я использую конфигурацию по умолчанию для подключения к MariaDB со стандартной конфигурацией источника данных .

Процесс Камунды myProcess.bpmn Определение таймера:

  • Процесс starteble и executable
  • Тип определения таймера - Cycle, а определение таймера - 0 0 0 ? * * *.

На основе Документация по Job Executor Я наблюдал это значение сохраняется в таблице ACT_RU_JOB в столбце REPEAT_.

SELECT ID_, REPEAT_ from act_ru_job;

--------------------------------------------------------
| ID_                                  | REPEAT_       |
--------------------------------------------------------
| 0d1f49da-83a8-11ea-a61b-98fa9b04dfaf | 0 0 0 ? * * * |
--------------------------------------------------------

Изменение выражения CRON прямо в myProcess.bpmn с помощью Camunda Modeler и перезапуск приложения обновили это значение в базе данных, и Process Orchestrator работает с новым значением.

Проблема

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

application.properties с другим случайным значением: process.timer: 1 2 3 ? * * *

@Slf4j
@Configuration
public class TimerConfiguration {

    @Value("${process.timer}") 
    private String timerExpression;

    @Bean
    public String timerExpression() {
        // the log truly logs 1 2 3 ? * * *
        log.info("Periodical timer expression has been configured to: {}", timerExpression);
        return timerExpression;
    }
}

Camunda Process myProcess.bpmn Определение таймера ( Ссылка на экран ) использует значение Dynami c в качестве определения таймера:

${timerConfiguration.timerExpression()}

Вопрос

Как заставить Camunda синхронизировать сконфигурированные данные с базой данных, которую он использует? Исключений нет, приложение продолжает использовать старую конфигурацию из базы данных.

SELECT ID_, REPEAT_ from act_ru_job;

Запрос возвращает старое значение. Когда выражение CRON устанавливается вручную прямо внутри процесса myProcess.bpmn, значение обновляется после перезапуска.

1 Ответ

1 голос
/ 22 апреля 2020

Быстрый ответ: Процессы с регистром событий запуска таймера в процессоре процессов при запуске приложения (например, процесс развернут) ... поэтому «timerExpression ()» читается только один раз ...

Я не мог еще найти обходной путь ... кроме перераспределения bpmn для перерегистрации таймера ... что сделало бы устаревшей концепцию таймера на основе выражений.

Решение не на bpmn можно использовать обычный компонент планировщика, который просто запускает процесс через API-интерфейс runtimeService и вообще не использует событие запуска таймера.

...