Мое приложение выполняет задания в заданное время с помощью cron. Пользователь может изменять свойства файла, состоящие из конфигурации строк cron. Когда свойства файла изменяется, Spring должен обновить конфигурацию и все модули, зависящие от этой конфигурации во время выполнения.
Я пытался что-то сделать, но не работал для меня:
@RefreshScope
менял на CronTimerConfiguration
класс.@RefreshScope
менял на getTimer()
@Bean
не может создать саб класс final java.lang.String. Я попробывал поменять сигнатуру метода на public Object getTimer0()
, это скомпилировалось, но не заработало.@Scheduled
аннотация хочет постоянное значение поэтому я не могу юзать поля.spring.devtools.restart.enabled=true
и spring.devtools.restart.additional-paths=src/main/resources
. Spring перезагружается когда файл изменяется, но foo()
метод обрашяется к старому cron значению.
@NotNull
@Value(value = "${cron.timer0}")
public String timer0;
У меня нету идей как заставить его работать? Возможно есть путь без аннотаций? Я видел классы что имитируют @Scheduled(fixedRate ="")
, но мне нужен класс что имитирует @Scheduled(cron ="")
.
PS Spring version 4.3.10.RELEASE
Configuration класс:
@Configuration
@ConfigurationProperties("cron")
public class CronTimerConfiguration {
@NotNull
private String timer0;
public void setTimer0(String cronString) {
this.timer0 = cronString;
}
@Bean
public String getTimer0() {
return timer0;
}
}
application.properties йаил:
cron.timer0=0 0 */12 * * *
Контроллер:
@Controller
public class MainController {
@Scheduled(cron = "${cron.timer0}")
public void foo() {
System.out.println("Time now is " + new SimpleDateFormat("HH:mm:ss").format(new Date()));
}
}
SpringBootApplication:
@SpringBootApplication
@EnableScheduling
@ComponentScan(basePackages={"cron", "web"})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Нашел решение через class implements SchedulingConfigurer
и реализацию метода
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
paymentService.processPayment();
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
String cron = new SampleProperty().getStringProp1();
CronTrigger trigger = new CronTrigger(cron);
return trigger.nextExecutionTime(triggerContext);
}
});
}
с использованием event-based property class
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
позволяет ли swt во время выполнения программы добавлять gui элементы? например нажал на кнопку и создался Label с каким-нибудь текстом upd: код...
Есть приложение, оно циклически отправляет запрос на сервер и если в ответ приходит новое сообщение то обновляет Лист вьюСкажите пожалуйста,...
Код для добавления написанной строки после определенной строкиРаньше проблема была и при чтении из файла, но поменяла в настройках кодировку...