gpt4 book ai didi

java - 如何设置以根据优先级运行批处理作业?

转载 作者:搜寻专家 更新时间:2023-11-01 00:56:02 26 4
gpt4 key购买 nike

我查阅了文档并多次尝试通过 Google 进行学习,但到目前为止我还是一无所获:

1) 是否有一个可设置的参数可以让我实现以下目标?如果有,我该如何配置它?

我想设置批处理作业,这样除了“正常”优先级之外,我还可以选择运行“高”优先级作业,这些作业会使其他作业排队。在“正常”优先级作业中,FIFO 很好。我想要持久记录已提交的作业及其状态,最好是自动重试失败。

我特别使用 Spring-Batch 3.0.3,一般使用 Spring 4.0.6。我正在从 JBoss AS 7.1.1 服务器上的 Web 服务提交作业。

2) 如果没有开箱即用的实现,我可以写一些东西(一个 taskExecutor 吗?)来实现这个目标?我该怎么做?

我让建议的 ThreadPoolExecutor 开始工作,但 Job 类仍然难以处理,因为我无法找到指定作业类的位置。 (出于多种原因,我在 jXML 中进行配置,而不是通过注释以编程方式进行。)无论我做什么,部署总是使用 org.springframework.batch.core.job.flow.FlowJob 进行,然后可以'转换为不同的工作类别。

最佳答案

您可以使用带有 PriorityBlockingQueue 的 ExecutorService 来处理这个问题,例如:

int maxThreads = 4;
ExecutorService pool = new ThreadPoolExecutor(1, maxThreads, 1, TimeUnit.SECONDS, new PriorityBlockingQueue<Runnable>());

然后,对于尽可能多的工作:

Job job = new Job(desiredPriority);
pool.execute(job);

PriorityBlockingQueue 将根据您传递给它们的优先级对它们进行排序。

您的 Job 类将实现 Runnable 和 Comparable:

public class Job implements Runnable, Comparable<Job> {
private final int priority;

public Job(int priority) {
this.priority = priority;
}

@Override
public int compareTo(Job o) {
// enforces descending order (but this is up to you)
if (this.priority > o.priority) {
return -1;
} else if (this.priority < o.priority) {
return 1;
} else {
return 0;
}
}

@Override
public void run() {
// do whatever needs to happen on a thread
}
}

关于java - 如何设置以根据优先级运行批处理作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29678778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com