Skip to content

Instantly share code, notes, and snippets.

@idyoshin
Created May 21, 2016 19:47
Show Gist options
  • Save idyoshin/74ad80841a51e1be62208f3fd58eeb6a to your computer and use it in GitHub Desktop.
Save idyoshin/74ad80841a51e1be62208f3fd58eeb6a to your computer and use it in GitHub Desktop.
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.*;
import org.springframework.batch.core.explore.JobExplorer;
import org.springframework.stereotype.Service;
import javax.inject.Inject;
import java.math.BigDecimal;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* Сервис который предоставляет возможности просмотра деталей выполнения задачи
*
*/
@Service
public class JobInstanceExplorer {
private static final Logger log = LoggerFactory.getLogger(JobInstanceExplorer.class);
private JSR310PersistenceConverters.LocalDateTimeConverter converter = new JSR310PersistenceConverters.LocalDateTimeConverter();
@Inject
private JobExplorer jobExplorer;
public JobExecutionDetails fetchDetailsOfExecution(JobExecution jobExecution) {
JobExecutionDetails details = new JobExecutionDetails();
details.setCreateTime(converter.convertToEntityAttribute(jobExecution.getCreateTime()));
details.setEndTime(converter.convertToEntityAttribute(jobExecution.getEndTime()));
details.setStartTime(converter.convertToEntityAttribute(jobExecution.getStartTime()));
details.setLastUpdated(converter.convertToEntityAttribute(jobExecution.getLastUpdated()));
details.setStatus(jobExecution.getStatus());
details.setExitStatus(jobExecution.getExitStatus());
details.setJobConfigurationName(jobExecution.getJobConfigurationName());
details.setExecutionData(jobExecution.getExecutionContext().entrySet());
jobExecution.getFailureExceptions()
.stream()
.forEach(o -> details.getFailureExceptions().add(new ThrowableDetails(o)));
for (String name : jobExecution.getJobParameters().getParameters().keySet()) {
JobParameter param = jobExecution.getJobParameters().getParameters().get(name);
JobParameterDetails parameterDetails = new JobParameterDetails();
parameterDetails.setName(name);
switch (param.getType()) {
case DATE: {
parameterDetails.setDateValue(((Date) param.getValue()).toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
break;
}
case DOUBLE: {
parameterDetails.setDecimalValue(new BigDecimal((Double) param.getValue()));
break;
}
case LONG: {
parameterDetails.setLongValue((Long) param.getValue());
break;
}
case STRING: {
parameterDetails.setStringValue((String) param.getValue());
break;
}
}
details.getJobParameters().add(parameterDetails);
}
details.setStepExecutions(
jobExecution.getStepExecutions()
.stream()
.map(o -> new StepExecutionDetails(o))
.collect(Collectors.toList())
);
return details;
}
/**
* Возвращает детали данного выполнения
*
* @param request
* @return
*/
public List<JobExecutionDetails> fetchCurrentDetails(Long request) {
log.debug("trying to fetch JobExecutionDetails for {}", request);
List<JobExecution> data;
JobInstance job = jobExplorer.getJobInstance(request);
if (job == null) {
log.debug("cannot find JobExecutionDetails for {}", request);
return null;
}
data = jobExplorer.getJobExecutions(job);
List<JobExecutionDetails> response = new ArrayList<>();
for (JobExecution jobExecution : data) {
response.add(fetchDetailsOfExecution(jobExecution));
}
return response;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment