Вопрос: как я могу обработать цепочку резервных значений в выражении Spring, позволяя мне откатиться к конфигурации более высокого уровня, пока я не получу определенное значение?
Чтобы немного объяснить, давайте проиллюстрируем это моим собственный вариант использования: я намеревался создать приложение Spring, используя аннотацию @Scheduled
для запуска некоторых процессов. Дело в том, что у меня много запланированных задач, и я бы позволил легко настраивать рабочую частоту для всех из них или только для подмножества.
Итак, я искал что-то вроде
@Component
public class SpecificTaskRunner {
@Scheduled(cron = "${ specific-task-cron ?: task-families-cron ?: default-cron }")
public void specificTask() {
doSomething();
}
}
Разрешить приложению настраивать частоту всех запланированных задач сразу, переопределив значение default-cron
, или только их подмножество, переопределив свойство семейства задач, или, наконец, указав для каждой задачи. Преимущество этого подхода состоит в том, что он позволяет играть с несколькими уровнями конфигурации, поскольку каждая запланированная задача ищет соответствующее свойство, начиная с самого определенного c, и ищет более универсальное c, пока не получит что-то определенное, в конечном итоге поддержка глобального значения по умолчанию.
К сожалению ... это не работает. При оценке, если первый элемент не определен, тогда откат для всего оставшегося. В этом примере это будет означать, что если в конфигурации отсутствует значение для specific-task-cron
, то разрешенное значение будет: task-families-cron ?: default-cron
, что, к сожалению, не то, что я ищу!