我已经定义了以下Spring Boot应用程序:
@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
的类)。它们应该无限期地运行。
运行它们的“春季方式”是什么? (并且自动执行,而无需明确知道它们)
谢谢
答案 0 :(得分:2)
并自动执行操作,而无需明确了解它们
没有机制可以从某个特定位置自动运行某些Runnable
。您需要找到一种方法来通知Spring这些类。
三种常见情况:
ApplicationRunner
和CommandLineRunner
。您可以聚合Runnable
并将其包装到应该是Bean的[Application|CommandLine]Runner
中(例如@Bean
,@Component
等),也可以将每个{{1 }}单独的Runnable
。
TaskExecutor
。您注入了[Application|CommandLine]Runner
,并给了它先前收集的TaskExecutor
。
TaskScheduler
。您注入了Runnable
,并给它先前收集的TaskScheduler
,再加上a trigger。
答案 1 :(得分:2)
您可以(1)用@Component注释实现Runnable的类,以便Spring可以找到它们。然后,您可以(2)用@Service编写带有@Autowired列表的WorkManager,该列表将由(1)中所有类的列表实例进行初始化。并且可以(3)在WorkManager中编写一个@PostConstruct方法,该方法将遍历该Runnable列表,然后将每个传递给TaskExecutor来运行...