我有3个任务。 1st - 添加新数据。第二 - 备份。 3 - 删除旧数据。他们每10分钟工作一次。它应该如何:
1st task
2nd task
3rd task
我得到了什么:
2nd task
1st task
3rd task
如何设置任务优先级?
答案 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类,例如具有指定的优先级。