Я пытаюсь периодически выполнять какую-то работу в приложении Spring MVC.Основываясь на обучающих материалах онлайн, я настроил запланированное задание следующим образом:
Вот AppInitializer (у меня нет настроек в XML):
public class AppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(JPAConfiguration.class);
servletContext.addListener(new ContextLoaderListener(rootContext));
AnnotationConfigWebApplicationContext dispatcherServlet = new AnnotationConfigWebApplicationContext();
dispatcherServlet.register(MvcConfig.class);
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(dispatcherServlet));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
Вот файл конфигурации:
@Configuration
@EnableScheduling
@EnableTransactionManagement
@ComponentScan(basePackages = {"com.prime.tutorials"})
@EnableJpaRepositories(basePackages = {"com.prime.tutorials.model", "com.prime.tutorials.repository"})
public class JPAConfiguration {
@Value("${jdbcURL}")
private transient String jdbcURL;
@Value("${dbPassword}")
private transient String dbPassword;
/* The usual stuff here, let me know if you want me post that as well */
}
Это класс, обрабатывающий запланированное задание:
@Service
public class ScheduledJobService {
@Autowired
private PrimeRepository primeRepository
@Scheduled(fixedDelayString = "${fixedDelay.in.milliseconds:10000}")
public void run() {
System.out.println("Current time is :: " + Calendar.getInstance().getTime());
}
}
Как видите, фиксированная задержка установлена на 10 секунд, но моя работа выполняется каждые 5 секунд.Я не могу понять, почему это происходит.Ранее я просматривал вопросы, связанные с этой темой, но не смог найти подходящего решения.
В других публикациях предполагается, что в таких случаях компоненты могут инициализироваться дважды, но на основании моей конфигурации яне уверен, как это происходит.
Аналогичный вопрос Этот вопрос, представленный выше, кажется точной копией того, что я спрашиваю, но ОП не опубликовал свою конфигурацию или настройку.Большинство ответов предполагают двойную инициализацию компонентов, что, я не уверен, имеет место в моем приложении.
Current time is :: Sun Jun 10 22:53:16 EDT 2018
Current time is :: Sun Jun 10 22:53:22 EDT 2018
Current time is :: Sun Jun 10 22:53:26 EDT 2018
Current time is :: Sun Jun 10 22:53:32 EDT 2018
Current time is :: Sun Jun 10 22:53:36 EDT 2018
EDIT-1
Основываясь на предложении Дженнифер, я вижу, что два экземпляра вызывают метод run.
РЕДАКТИРОВАТЬ-2
Догадка М.Дейнума была абсолютно верной, мой MvcConfig.java был аннотирован @ComponentScan, который дважды запустил задание по расписанию.Но после удаления этой аннотации из MvcConfig.java мои конечные точки перестали работать.Что мне здесь не хватает ..