Насколько я знаю, вы не можете сделать это напрямую. Однако свойства конфигурации загрузки Spring поддерживают автоматическое c преобразование таких параметров, как 15s
и 5m
в Duration
.
Это означает, что вы можете создать класс @ConfigurationProperties
например:
@Component
@ConfigurationProperties("app")
public class AppProperties {
private Duration delay;
// Setter + Getter
}
Кроме того, поскольку вы можете использовать ссылки на bean-компоненты с языком выражений Spring в аннотации @Scheduled
, вы можете сделать что-то вроде этого:
@Scheduled(fixedDelayString = "#{@appProperties.getDelay().toMillis()}")
public void schedule() {
log.info("Scheduled");
}
Кроме того, вы можете программно добавить задачу к TaskScheduler
. Преимущество этого в том, что у вас больше безопасности во время компиляции, и это позволяет вам работать с Duration
напрямую:
@Bean
public ScheduledFuture<?> schedule(TaskScheduler scheduler, AppProperties properties) {
return scheduler.scheduleWithFixedDelay(() -> log.info("Scheduled"), properties.getDelay());
}