package fr.keemto.web.config; import fr.keemto.core.Task; import fr.keemto.core.TaskRegistry; import fr.keemto.scheduling.TaskRegistrar; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; import java.util.List; @Component public class SchedulingSpringBootstrapper implements ApplicationListener<ContextRefreshedEvent> { private static final Logger log = LoggerFactory.getLogger(TaskRegistry.class); private final TaskRegistrar taskRegistrar; private final TaskRegistry taskRegistry; @Autowired public SchedulingSpringBootstrapper(TaskRegistrar taskRegistrar, TaskRegistry taskRegistry) { this.taskRegistrar = taskRegistrar; this.taskRegistry = taskRegistry; } @Override public void onApplicationEvent(ContextRefreshedEvent event) { if (isAnEventFromWebContext(event)) { log.info("Web context has been refreshed, bootstrapper is going to cancel all tasks and register them again."); boostrapTasks(); } else { log.debug("Ignoring refresh context event because this is not web context"); } } private void boostrapTasks() { List<Task> tasks = taskRegistry.findTasks(); taskRegistrar.registerTasks(tasks); } private boolean isAnEventFromWebContext(ContextRefreshedEvent event) { return event.getApplicationContext().getParent() != null; } }