如何设置计划任务的优先级?

时间:2013-12-05 16:03:39

标签: java spring scheduled-tasks

我有3个任务。 1st - 添加新数据。第二 - 备份。 3 - 删除旧数据。他们每10分钟工作一次。它应该如何:

1st task
2nd task
3rd task

我得到了什么:

2nd task
1st task
3rd task

如何设置任务优先级?

2 个答案:

答案 0 :(得分:2)

您可能希望将这些任务转换为Spring Batch作业。这将提供更强大的功能,如事务和更好的错误处理。

答案 1 :(得分:1)

如果您使用java ThreadPoolExecutor,您可以提供自己的任务队列以供其内部使用,则不应直接与队列交互。

您可以使用由自定义PriorityBlockingQueue构建的Comparator来返回首先执行的任务。

您可以将@Scheduled注释与自定义执行程序结合使用,如here in the docs所述:

 @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());
             }
         }));
     }
 }

具有实现Runnable的Runnable2类,例如具有指定的优先级。