Весеннее загрузочное приложение для фоновых рабочих - PullRequest
0 голосов
/ 18 ноября 2018

Я определил следующее загрузочное приложение Spring:

@SpringBootApplication
public class Application implements CommandLineRunner {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(WebApplicationType.NONE).run(args);
    }

    public void run(String... args) throws Exception {
        Thread.currentThread().join();
    }
}

У меня также есть пакет рабочих (то есть могут быть классы, которые реализуют Runnable).Они должны работать бесконечно.

Что такое «весенний путь» для их запуска?(и делает это автоматически, не зная их явно)

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Вы можете (1) сделать так, чтобы ваши классы, реализующие Runnable, были аннотированы @Component, чтобы Spring мог их найти.Затем вы можете (2) написать WorkManager, аннотированный @Service, списком @Autowired - который Spring будет инициализировать списком экземпляров всех ваших классов из (1).И может (3) написать метод @PostConstruct в вашем WorkManager, который будет перебирать этот список Runnables и передавать каждый из них в TaskExecutor для запуска ...

0 голосов
/ 18 ноября 2018

и делать это автоматически, не зная их явно

Нет механизма для автоматического запуска некоторых Runnable s из определенного места.Вам нужно найти способ сообщить Spring об этих классах.

Три распространенных сценария:

  1. Выполнить некоторый код во время запуска приложения: ApplicationRunner иCommandLineRunner.

Вы либо собираете Runnable с и заключаете их в [Application|CommandLine]Runner, который должен быть бобом (например, @Bean, @Component,и т. д.) или сделать каждый Runnable отдельным [Application|CommandLine]Runner.

Выполнить некоторый код в определенный момент времени: TaskExecutor.

Вы вводите TaskExecutor и даете ему ранее набранные Runnable с.

Несколько раз выполнить код: TaskScheduler.

Вы вводите TaskScheduler и даете ему ранее набранные Runnable с, а также триггер .

Подробнее: Выполнение и планирование задач

...