Одновременный запланированный метод при весенней загрузке - PullRequest
0 голосов
/ 13 июня 2018

У меня есть приложение Spring, в котором есть два класса, аннотированных @Component, в каждом классе у меня есть метод, аннотированный @Scheduled, что означает, что я хочу запускать эти методы с фиксированным интервалом, например:

Это Первый Компонент, который имеет метод readFirstComponent (), этот метод читает что-то откуда-то, и для этого требуется некоторое время, @Component открытый класс FirstComp {

@Scheduled(fixedRate = 20000 )
public void readFirstComponent() {
    // body
}

// другие методы}

Второй компонент почти делает то же самое, что и Первый компонент,

@Component

открытый класс SecondComp {

@Scheduled(fixedRate = 20000 )
public void readSecondComponent() {
    // body
}

// другие методы}

У меня естькласс бегуна для запуска приложениязапуск и т. д. Моя проблема в том, что я хочу запустить оба метода одновременно, пожалуйста, помогите мне решить эту проблему

1 Ответ

0 голосов
/ 13 июня 2018

По умолчанию есть только один поток для выполнения задач планирования.

Вы можете прочитать об этом здесь и узнать, как настроить планировщик для получения пула с большим количеством потоков.

27.4.1 Включить планирование аннотаций

Чтобы включить поддержку аннотаций @Scheduled и @Async, добавьте @EnableScheduling и @EnableAsync к одному из ваших классов @Configuration:

@Configuration
@EnableAsync
@EnableScheduling
public class AppConfig {
}

Вы можете выбрать и выбрать соответствующие аннотации для вашего приложения.Например, если вам нужна только поддержка @Scheduled, просто опустите @EnableAsync.Для более детального управления вы можете дополнительно реализовать интерфейсы SchedulingConfigurer и / или AsyncConfigurer.См. Подробности в javadocs.

Если вы предпочитаете конфигурацию XML, используйте элемент.

<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
<task:executor id="myExecutor" pool-size="5"/>
<task:scheduler id="myScheduler" pool-size="10"/>

Обратите внимание, что с указанным выше XML предоставляется ссылка на исполнителя для обработките задачи, которые соответствуют методам с аннотацией @Async, и ссылка на планировщик предназначена для управления этими методами, аннотированными @ Scheduled.

Поскольку вы используете аннотации для конфигурирования своих bean-компонентов, было бы лучше implement the SchedulingConfigurer.

Как это:

@Configuration
@EnableScheduling
public class SchedulingConfig implements SchedulingConfigurer {

@Override
public void configureTasks(
  ScheduledTaskRegistrar taskRegistrar) {
    taskRegistrar.setScheduler(taskExecutor());
}

@Bean(destroyMethod = "shutdown")
public Executor taskExecutor() {
    return Executors.newScheduledThreadPool(10);
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...