Для вашего Q1: предложите вам иметь логическую переменную уровня класса, например isRunning
, как показано ниже
public class scheduler {
private boolean isRunning = false;
@Scheduled(cron = "${my.cron.expression}")
public void scheduleTask(){
if(!isRunning) {
isRunning = true;
// executions goes here
}
isRunning = false;
}
}
Q2: для перезагрузки beans
public class scheduler {
private boolean isRunning = false;
@Scheduled(cron = "${my.cron.expression}")
public void scheduleTask(){
if(!isRunning) {
isRunning = true;
// executions goes here
}
isRunning = false;
DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry)
context.getBeanFactory();
registry.destroySingleton({yourbean}) //destroys the bean object
registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache
}
}