Reorganize methods in JobOperator

This commit is contained in:
Mahmoud Ben Hassine
2025-05-07 23:16:15 +02:00
parent afdd842bc3
commit b11c4b019b
2 changed files with 195 additions and 195 deletions

View File

@@ -43,79 +43,11 @@ import org.springframework.lang.Nullable;
public interface JobOperator extends JobLauncher {
/**
* List the {@link JobExecution JobExecutions} associated with a particular
* {@link JobInstance}, in reverse order of creation (and therefore usually of
* execution).
* @param instanceId the id of a {@link JobInstance}
* @return the id values of all the {@link JobExecution JobExecutions} associated with
* this instance
* @throws NoSuchJobInstanceException if the {@link JobInstance} associated with the
* {@code instanceId} cannot be found.
* @deprecated Since 6.0 in favor of
* {@link org.springframework.batch.core.repository.JobRepository#getJobExecutions(JobInstance)}.
* Scheduled for removal in 6.2 or later.
* List the available job names that can be launched with
* {@link #start(String, Properties)}.
* @return a set of job names
*/
@Deprecated(since = "6.0", forRemoval = true)
List<Long> getExecutions(long instanceId) throws NoSuchJobInstanceException;
/**
* List the {@link JobInstance JobInstances} for a given job name, in reverse order of
* creation (and therefore usually of first execution).
* @param jobName the job name that all the instances have
* @param start the start index of the instances
* @param count the maximum number of values to return
* @return the id values of the {@link JobInstance JobInstances}
* @throws NoSuchJobException is thrown if no {@link JobInstance}s for the jobName
* exist.
* @deprecated Since 6.0 in favor of
* {@link org.springframework.batch.core.repository.JobRepository#getJobInstances(String, int, int)}.
* Scheduled for removal in 6.2 or later.
*/
@Deprecated(since = "6.0", forRemoval = true)
List<Long> getJobInstances(String jobName, int start, int count) throws NoSuchJobException;
/**
* @param jobName {@link String} name of the job.
* @param jobParameters {@link JobParameters} parameters for the job instance.
* @return the {@link JobInstance} with the given name and parameters, or
* {@code null}.
* @deprecated Since 6.0 in favor of
* {@link org.springframework.batch.core.repository.JobRepository#getJobInstance(String, JobParameters)}.
* Scheduled for removal in 6.2 or later.
*/
@Deprecated(since = "6.0", forRemoval = true)
@Nullable
default JobInstance getJobInstance(String jobName, JobParameters jobParameters) {
throw new UnsupportedOperationException();
}
/**
* Get the id values of all the running {@link JobExecution JobExecutions} with the
* given job name.
* @param jobName the name of the job to search under
* @return the id values of the running {@link JobExecution} instances
* @throws NoSuchJobException if there are no {@link JobExecution JobExecutions} with
* that job name
* @deprecated Since 6.0 in favor of
* {@link org.springframework.batch.core.repository.JobRepository#findRunningJobExecutions(String)}.
* Scheduled for removal in 6.2 or later.
*/
@Deprecated(since = "6.0", forRemoval = true)
Set<Long> getRunningExecutions(String jobName) throws NoSuchJobException;
/**
* Get the {@link JobParameters} as a human readable String (new line separated
* key=value pairs).
* @param executionId the id of an existing {@link JobExecution}
* @return the job parameters that were used to launch the associated instance
* @throws NoSuchJobExecutionException if the id was not associated with any
* {@link JobExecution}
* @deprecated Since 6.0 in favor of
* {@link org.springframework.batch.core.repository.JobRepository#getJobExecution(Long).getJobParameters()}.
* Scheduled for removal in 6.2 or later.
*/
@Deprecated(since = "6.0", forRemoval = true)
String getParameters(long executionId) throws NoSuchJobExecutionException;
Set<String> getJobNames();
/**
* Start a new instance of a job with the parameters specified.
@@ -195,6 +127,94 @@ public interface JobOperator extends JobLauncher {
*/
boolean stop(long executionId) throws NoSuchJobExecutionException, JobExecutionNotRunningException;
/**
* Mark the {@link JobExecution} as ABANDONED. If a stop signal is ignored because the
* process died this is the best way to mark a job as finished with (as opposed to
* STOPPED). An abandoned job execution cannot be restarted by the framework.
* @param jobExecutionId the job execution id to abort
* @return the {@link JobExecution} that was aborted
* @throws NoSuchJobExecutionException thrown if there is no job execution for the
* jobExecutionId.
* @throws JobExecutionAlreadyRunningException if the job is running (it should be
* stopped first)
*/
JobExecution abandon(long jobExecutionId) throws NoSuchJobExecutionException, JobExecutionAlreadyRunningException;
/**
* List the {@link JobExecution JobExecutions} associated with a particular
* {@link JobInstance}, in reverse order of creation (and therefore usually of
* execution).
* @param instanceId the id of a {@link JobInstance}
* @return the id values of all the {@link JobExecution JobExecutions} associated with
* this instance
* @throws NoSuchJobInstanceException if the {@link JobInstance} associated with the
* {@code instanceId} cannot be found.
* @deprecated Since 6.0 in favor of
* {@link org.springframework.batch.core.repository.JobRepository#getJobExecutions(JobInstance)}.
* Scheduled for removal in 6.2 or later.
*/
@Deprecated(since = "6.0", forRemoval = true)
List<Long> getExecutions(long instanceId) throws NoSuchJobInstanceException;
/**
* List the {@link JobInstance JobInstances} for a given job name, in reverse order of
* creation (and therefore usually of first execution).
* @param jobName the job name that all the instances have
* @param start the start index of the instances
* @param count the maximum number of values to return
* @return the id values of the {@link JobInstance JobInstances}
* @throws NoSuchJobException is thrown if no {@link JobInstance}s for the jobName
* exist.
* @deprecated Since 6.0 in favor of
* {@link org.springframework.batch.core.repository.JobRepository#getJobInstances(String, int, int)}.
* Scheduled for removal in 6.2 or later.
*/
@Deprecated(since = "6.0", forRemoval = true)
List<Long> getJobInstances(String jobName, int start, int count) throws NoSuchJobException;
/**
* @param jobName {@link String} name of the job.
* @param jobParameters {@link JobParameters} parameters for the job instance.
* @return the {@link JobInstance} with the given name and parameters, or
* {@code null}.
* @deprecated Since 6.0 in favor of
* {@link org.springframework.batch.core.repository.JobRepository#getJobInstance(String, JobParameters)}.
* Scheduled for removal in 6.2 or later.
*/
@Deprecated(since = "6.0", forRemoval = true)
@Nullable
default JobInstance getJobInstance(String jobName, JobParameters jobParameters) {
throw new UnsupportedOperationException();
}
/**
* Get the id values of all the running {@link JobExecution JobExecutions} with the
* given job name.
* @param jobName the name of the job to search under
* @return the id values of the running {@link JobExecution} instances
* @throws NoSuchJobException if there are no {@link JobExecution JobExecutions} with
* that job name
* @deprecated Since 6.0 in favor of
* {@link org.springframework.batch.core.repository.JobRepository#findRunningJobExecutions(String)}.
* Scheduled for removal in 6.2 or later.
*/
@Deprecated(since = "6.0", forRemoval = true)
Set<Long> getRunningExecutions(String jobName) throws NoSuchJobException;
/**
* Get the {@link JobParameters} as a human readable String (new line separated
* key=value pairs).
* @param executionId the id of an existing {@link JobExecution}
* @return the job parameters that were used to launch the associated instance
* @throws NoSuchJobExecutionException if the id was not associated with any
* {@link JobExecution}
* @deprecated Since 6.0 in favor of
* {@link org.springframework.batch.core.repository.JobRepository#getJobExecution(Long).getJobParameters()}.
* Scheduled for removal in 6.2 or later.
*/
@Deprecated(since = "6.0", forRemoval = true)
String getParameters(long executionId) throws NoSuchJobExecutionException;
/**
* Summarise the {@link JobExecution} with the supplied id, giving details of status,
* start and end times etc.
@@ -223,24 +243,4 @@ public interface JobOperator extends JobLauncher {
@Deprecated(since = "6.0", forRemoval = true)
Map<Long, String> getStepExecutionSummaries(long executionId) throws NoSuchJobExecutionException;
/**
* List the available job names that can be launched with
* {@link #start(String, Properties)}.
* @return a set of job names
*/
Set<String> getJobNames();
/**
* Mark the {@link JobExecution} as ABANDONED. If a stop signal is ignored because the
* process died this is the best way to mark a job as finished with (as opposed to
* STOPPED). An abandoned job execution cannot be restarted by the framework.
* @param jobExecutionId the job execution id to abort
* @return the {@link JobExecution} that was aborted
* @throws NoSuchJobExecutionException thrown if there is no job execution for the
* jobExecutionId.
* @throws JobExecutionAlreadyRunningException if the job is running (it should be
* stopped first)
*/
JobExecution abandon(long jobExecutionId) throws NoSuchJobExecutionException, JobExecutionAlreadyRunningException;
}

View File

@@ -121,114 +121,11 @@ public class SimpleJobOperator extends TaskExecutorJobLauncher implements JobOpe
this.jobRegistry = jobRegistry;
}
@Override
@Deprecated(since = "6.0", forRemoval = true)
public List<Long> getExecutions(long instanceId) throws NoSuchJobInstanceException {
JobInstance jobInstance = jobRepository.getJobInstance(instanceId);
if (jobInstance == null) {
throw new NoSuchJobInstanceException(String.format("No job instance with id=%d", instanceId));
}
List<Long> list = new ArrayList<>();
for (JobExecution jobExecution : jobRepository.getJobExecutions(jobInstance)) {
list.add(jobExecution.getId());
}
return list;
}
@Override
public Set<String> getJobNames() {
return new TreeSet<>(jobRegistry.getJobNames());
}
@Override
@Deprecated(since = "6.0", forRemoval = true)
public List<Long> getJobInstances(String jobName, int start, int count) throws NoSuchJobException {
List<Long> list = new ArrayList<>();
List<JobInstance> jobInstances = jobRepository.getJobInstances(jobName, start, count);
for (JobInstance jobInstance : jobInstances) {
list.add(jobInstance.getId());
}
if (list.isEmpty() && !jobRegistry.getJobNames().contains(jobName)) {
throw new NoSuchJobException("No such job (either in registry or in historical data): " + jobName);
}
return list;
}
@Override
@Nullable
@Deprecated(since = "6.0", forRemoval = true)
public JobInstance getJobInstance(String jobName, JobParameters jobParameters) {
return this.jobRepository.getJobInstance(jobName, jobParameters);
}
@Override
@Deprecated(since = "6.0", forRemoval = true)
public String getParameters(long executionId) throws NoSuchJobExecutionException {
JobExecution jobExecution = findExecutionById(executionId);
Properties properties = this.jobParametersConverter.getProperties(jobExecution.getJobParameters());
return PropertiesConverter.propertiesToString(properties);
}
@Override
@Deprecated(since = "6.0", forRemoval = true)
public Set<Long> getRunningExecutions(String jobName) throws NoSuchJobException {
Set<Long> set = new LinkedHashSet<>();
for (JobExecution jobExecution : jobRepository.findRunningJobExecutions(jobName)) {
set.add(jobExecution.getId());
}
if (set.isEmpty() && !jobRegistry.getJobNames().contains(jobName)) {
throw new NoSuchJobException("No such job (either in registry or in historical data): " + jobName);
}
return set;
}
@Override
@Deprecated(since = "6.0", forRemoval = true)
public Map<Long, String> getStepExecutionSummaries(long executionId) throws NoSuchJobExecutionException {
JobExecution jobExecution = findExecutionById(executionId);
Map<Long, String> map = new LinkedHashMap<>();
for (StepExecution stepExecution : jobExecution.getStepExecutions()) {
map.put(stepExecution.getId(), stepExecution.toString());
}
return map;
}
@Override
@Deprecated(since = "6.0", forRemoval = true)
public String getSummary(long executionId) throws NoSuchJobExecutionException {
JobExecution jobExecution = findExecutionById(executionId);
return jobExecution.toString();
}
@Override
public Long restart(long executionId) throws JobInstanceAlreadyCompleteException, NoSuchJobExecutionException,
NoSuchJobException, JobRestartException, JobParametersInvalidException {
if (logger.isInfoEnabled()) {
logger.info("Checking status of job execution with id=" + executionId);
}
JobExecution jobExecution = findExecutionById(executionId);
String jobName = jobExecution.getJobInstance().getJobName();
Job job = jobRegistry.getJob(jobName);
JobParameters parameters = jobExecution.getJobParameters();
if (logger.isInfoEnabled()) {
logger.info(String.format("Attempting to resume job with name=%s and parameters=%s", jobName, parameters));
}
try {
return run(job, parameters).getId();
}
catch (JobExecutionAlreadyRunningException e) {
throw new UnexpectedJobExecutionException(
String.format(ILLEGAL_STATE_MSG, "job execution already running", jobName, parameters), e);
}
}
@Override
public Long start(String jobName, Properties parameters)
throws NoSuchJobException, JobInstanceAlreadyExistsException, JobParametersInvalidException {
@@ -267,6 +164,32 @@ public class SimpleJobOperator extends TaskExecutorJobLauncher implements JobOpe
}
@Override
public Long restart(long executionId) throws JobInstanceAlreadyCompleteException, NoSuchJobExecutionException,
NoSuchJobException, JobRestartException, JobParametersInvalidException {
if (logger.isInfoEnabled()) {
logger.info("Checking status of job execution with id=" + executionId);
}
JobExecution jobExecution = findExecutionById(executionId);
String jobName = jobExecution.getJobInstance().getJobName();
Job job = jobRegistry.getJob(jobName);
JobParameters parameters = jobExecution.getJobParameters();
if (logger.isInfoEnabled()) {
logger.info(String.format("Attempting to resume job with name=%s and parameters=%s", jobName, parameters));
}
try {
return run(job, parameters).getId();
}
catch (JobExecutionAlreadyRunningException e) {
throw new UnexpectedJobExecutionException(
String.format(ILLEGAL_STATE_MSG, "job execution already running", jobName, parameters), e);
}
}
@Override
public Long startNextInstance(String jobName)
throws NoSuchJobException, UnexpectedJobExecutionException, JobParametersInvalidException {
@@ -364,6 +287,83 @@ public class SimpleJobOperator extends TaskExecutorJobLauncher implements JobOpe
return jobExecution;
}
@Override
@Deprecated(since = "6.0", forRemoval = true)
public List<Long> getExecutions(long instanceId) throws NoSuchJobInstanceException {
JobInstance jobInstance = jobRepository.getJobInstance(instanceId);
if (jobInstance == null) {
throw new NoSuchJobInstanceException(String.format("No job instance with id=%d", instanceId));
}
List<Long> list = new ArrayList<>();
for (JobExecution jobExecution : jobRepository.getJobExecutions(jobInstance)) {
list.add(jobExecution.getId());
}
return list;
}
@Override
@Deprecated(since = "6.0", forRemoval = true)
public List<Long> getJobInstances(String jobName, int start, int count) throws NoSuchJobException {
List<Long> list = new ArrayList<>();
List<JobInstance> jobInstances = jobRepository.getJobInstances(jobName, start, count);
for (JobInstance jobInstance : jobInstances) {
list.add(jobInstance.getId());
}
if (list.isEmpty() && !jobRegistry.getJobNames().contains(jobName)) {
throw new NoSuchJobException("No such job (either in registry or in historical data): " + jobName);
}
return list;
}
@Override
@Nullable
@Deprecated(since = "6.0", forRemoval = true)
public JobInstance getJobInstance(String jobName, JobParameters jobParameters) {
return this.jobRepository.getJobInstance(jobName, jobParameters);
}
@Override
@Deprecated(since = "6.0", forRemoval = true)
public String getParameters(long executionId) throws NoSuchJobExecutionException {
JobExecution jobExecution = findExecutionById(executionId);
Properties properties = this.jobParametersConverter.getProperties(jobExecution.getJobParameters());
return PropertiesConverter.propertiesToString(properties);
}
@Override
@Deprecated(since = "6.0", forRemoval = true)
public Set<Long> getRunningExecutions(String jobName) throws NoSuchJobException {
Set<Long> set = new LinkedHashSet<>();
for (JobExecution jobExecution : jobRepository.findRunningJobExecutions(jobName)) {
set.add(jobExecution.getId());
}
if (set.isEmpty() && !jobRegistry.getJobNames().contains(jobName)) {
throw new NoSuchJobException("No such job (either in registry or in historical data): " + jobName);
}
return set;
}
@Override
@Deprecated(since = "6.0", forRemoval = true)
public Map<Long, String> getStepExecutionSummaries(long executionId) throws NoSuchJobExecutionException {
JobExecution jobExecution = findExecutionById(executionId);
Map<Long, String> map = new LinkedHashMap<>();
for (StepExecution stepExecution : jobExecution.getStepExecutions()) {
map.put(stepExecution.getId(), stepExecution.toString());
}
return map;
}
@Override
@Deprecated(since = "6.0", forRemoval = true)
public String getSummary(long executionId) throws NoSuchJobExecutionException {
JobExecution jobExecution = findExecutionById(executionId);
return jobExecution.toString();
}
private JobExecution findExecutionById(long executionId) throws NoSuchJobExecutionException {
JobExecution jobExecution = jobRepository.getJobExecution(executionId);