[Spring] [SpringBoot]计划任务的所有注释配置

时间:2016-10-26 08:46:37

标签: spring spring-boot annotations scheduled-tasks threadpoolexecutor

大家早上好, 首先,我不得不说How to go from XML Spring scheduling configuration to annotation/code configuration?主题可以回答我的问题,但我不知道Spring工作得足以理解它: 根据{{​​3}} tuto,我有主要的Application类和ScheduledTasks类,它包含必须独立启动的N个方法(task1必须与task2并行运行,但2 task1不能同时运行)。

目前,所有方法都是按顺序执行的,我问的是如何配置that(),如果可能的话只能使用注释,包含xml文件? - 我要把Async注释?如果是这样,将@EnableAsync:放在Application类或ScheduledTasks类中? - 如果我必须创建xml文件,如何将它与我的Java类链接并告诉main()将其考虑在内? - 如何在xml文件中引用已使用注释创建的bean? - 我不能只用@Configuration添加新类来定义N大小的ScheduledThreadPoolExecutor吗? - 可以/我是否必须将此配置放入Application类,因为它使用包含@Configuration标记的@SpringBootApplication?

你有没有看到,Spring和SpringBoot对我来说很混乱,因为我暂时没有使用它,也不知道如何混合注释和xml文件。

非常感谢您的关注!

Edit1: 根据{{​​3}},我创建了没有bean创建的新Conf,因为如果我理解的话,我的ScheduledTasks类已经使用@Component“beanify”了。它没有做我想要的: 即使我指定fixedDelay而不是fixedRate(使用@Async),它也允许所有任务异步执行(task1& task2和task1& task1)。同样,即使使用fixedRate而不是fixedDelay且没有@Async,task1也不会并行运行(这不是我想要的,但只是为了理解)

Edit2:我回滚我的工作并且不使用AsyncConfigurer,因为这不是我想要的异步所以我将以下代码添加到我的Application类(或者在一个新的单独的@Configuration类中(实际上在任何地方)):

@Bean
public TaskScheduler poolScheduler() {
    ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
    scheduler.setThreadNamePrefix("poolScheduler");
    scheduler.setPoolSize(2);
    return scheduler;
}

它有效!!!! 但我不明白为什么,这似乎是神奇的,我讨厌计算机科学! - > Spring如何知道它必须专门为我的调度程序使用这个新bean? bean刚刚创建,与我的调度程序无关,不是吗?

0 个答案:

没有答案