Java Spring中的多个计划任务调用
我在beans.xml中对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> 我希望第一个计划任务总
<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中以特定方式安排任务。