запустить планировщик с пружинной аннотацией в методе - PullRequest
0 голосов
/ 08 июня 2018

Я хочу добавить аннотацию Spring @Scheduled к Spring Bean и запустить задачу в методе в другом классе.Есть только один способ запустить задачу в весенней ссылке - Scheduling-Tasks от @EnableScheduling.Как запустить его без @SpringBootApplication и весеннего запуска бегуна.

@Component
public class ScheduledTasks {
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
        System.out.println("The time is now {}" + dateFormat.format(new Date()));
    }
}

@SpringBootApplication
@EnableScheduling
public class SpringSheduleApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringSheduleApplication.class, args);
    }
}

@Component
    public class ShedullerStarter {
        public void start(){
            ScheduledTasks tasks = new ScheduledTasks();;
            try {
                // some code here
            } finally {
                // start annotation
                tasks.reportCurrentTime();
            }
        }
    }

Ответы [ 2 ]

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

Если вы ищете возможность инициировать планирование задач из другого Бина, тогда Запланированные аннотации не являются подходящим решением.Вместо этого вы можете использовать планировщик задач, который используется Spring, когда он планирует задачи аннотации по расписанию в фоновом режиме.Таким образом, следующие шаги: 1) Настройте bean-компонент планировщика задач

@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
    ThreadPoolTaskScheduler threadPoolTaskScheduler
      = new ThreadPoolTaskScheduler();
    threadPoolTaskScheduler.setPoolSize(5);
    threadPoolTaskScheduler.setThreadNamePrefix(
      "ThreadPoolTaskScheduler");
    return threadPoolTaskScheduler;
}

2) Добавьте его в bean-компонент, для которого вы хотите запустить планирование

@Autowired ThreadPoolTaskScheduler scheduler;

3) Запланируйте задачу в месте, где выхотите запустить планирование с нужными параметрами.

taskScheduler.schedule(
new Runnabletask("Specific time, 3 Seconds from now"),
  new Date(System.currentTimeMillis + 3000)
);

Для получения более подробной информации прочитайте http://www.baeldung.com/spring-task-scheduler

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

Вы можете включить планирование даже без @SpringBootApplication.Просто используйте @EnableScheduling для любого компонента в вашем проекте.

@EnableScheduling не привязан только к приложениям с пружинной загрузкой.Это аннотация под каркасом пружины (не баночка с пружинным чехлом)Таким образом, любое весеннее приложение может направить каркас для поиска аннотации @Scheduled, включив планирование с @EnableScheduling.

Вы можете положить его на любой боб.Например

@Configuration
@EnableScheduling
public class AppConfig {

     // various @Bean definitions

}  

или даже в классе, где у вас есть @Scheduled метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...