Java Spring中的多个计划任务调用

Java Spring中的多个计划任务调用,java,spring,spring-mvc,scheduled-tasks,Java,Spring,Spring Mvc,Scheduled Tasks,我在beans.xml中对Spring计划任务进行了以下配置: <task:scheduled-tasks> <task:scheduled ref="beanA" method="A" cron="0 0 0/1 * * *" /> <task:scheduled ref="beanA" method="B" cron="0 0 0/5 * * *"/> </task:scheduled-tasks> 我希望第一个计划任务总

我在beans.xml中对Spring计划任务进行了以下配置:

<task:scheduled-tasks>
    <task:scheduled ref="beanA" method="A" cron="0 0 0/1 * * *" />
    <task:scheduled ref="beanA" method="B" cron="0 0 0/5 * * *"/>
</task:scheduled-tasks>

我希望第一个计划任务总是在第二个任务之前运行。当我运行当前代码时,第二个任务首先运行,导致很少的并发问题。是否定义了一个优先级结构或一个标记/id,我可以用它来定义这样的层次结构?

您可以使用一个调度程序,它可以精确地执行您的要求。阅读文章,了解一步一步的步行

或者,您可能需要考虑将这些任务转换为作业。从文件中:

SpringBatch提供了可重用的功能,这些功能在处理大量记录时非常重要,包括日志/跟踪、事务管理、作业处理统计、作业重启、跳过和资源管理

虽然安排两个小任务可能有点过头了

第三种选择是使用java。您可以提供自己的任务队列供其内部使用,并且不应直接与队列交互

您可以使用由自定义比较器构建的
PriorityBlockingQueue
,该比较器返回先执行的任务

@Configuration
@EnableScheduling
public class AppConfig implements SchedulingConfigurer {
 @Override
 public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
     taskRegistrar.setScheduler(taskExecutor());
 }
 @Bean(destroyMethod="shutdown")
 public Executor taskExecutor() {
     return new ThreadPoolExecutor(1, 2, 10, TimeUnit.SECONDS, new PriorityBlockingQueue<Runnable>(20, new Comparator<Runnable2>() {
         @Override
         public int compare(Runnable2 o1, Runnable2 o2) {
             return o1.getPriority().compareTo(o2.getPriority());
         }
     }));
 }
}
@配置
@使能调度
公共类AppConfig实现SchedulingConfigurer{
@凌驾
公共无效配置任务(ScheduledTaskRegistrar任务注册器){
taskRegistrator.setScheduler(taskExecutor());
}
@Bean(destromethod=“shutdown”)
公共执行者任务执行者(){
返回新的ThreadPoolExecutor(1,2,10,TimeUnit.SECONDS,new PriorityBlockingQueue(20,new Comparator)(){
@凌驾
公共整数比较(runnable2o1,runnable2o2){
返回o1.getPriority().compareTo(o2.getPriority());
}
}));
}
}

cron表达式表示,
0/1***
命令*将在每个月的第一天上午12:00执行
0/5***
命令*将在每月第五天的12:00执行。你想知道什么,请解释一下。@RobinSaxena谢谢,虽然我知道cron表达式的意思,但我想知道如何在springbean中以特定方式安排任务。