我在和MDC记录工作信息。我有一个名为CommonBatchConfiguration的文件,它处理线程和日志作业信息。我想记录任何可能运行的作业,比如jobName和executionId。
我有这样的发射器:
@Bean(name = "AsyncMccJobLauncher")
public JobLauncher simpleJobLauncher(JobRepository jobRepository) {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
taskExecutor.setTaskDecorator(new TaskDecorator() {
@Override
public Runnable decorate(Runnable runnable) {
// MDC.put("execId", jobExecution.getJobId());
// MDC.put("jobName", "test jobName");
return new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// This adds batch logging info while the job is running
// MDC.put("execId", "here");
// MDC.put("jobName", "here");
runnable.run();
}
};
}
});
jobLauncher.setTaskExecutor(taskExecutor);
return jobLauncher;
}我怎么才能在这里获得工作信息?当我尝试使用JobExecution时,总是出现null
发布于 2018-09-04 19:35:13
当调用修饰runnable时,应该已经创建了作业执行。问题是如何在这一点上访问它?我不确定这是否很容易,除非您能够在一个匿名内部类实例(由Spring创建的runnable )的方法中内省一个最终变量,这个方法封装在一个匿名内部类实例中(您的装饰器) :-)
我想记录任何可能运行的作业,比如jobName和executionId。
你可能不需要有一个任务装饰师。您可以做的是子类SimpleJobLauncher和重写run,如下所示:
@Bean(name = "AsyncMccJobLauncher")
public JobLauncher simpleJobLauncher(JobRepository jobRepository) {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher() {
@Override
public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException {
JobExecution jobExecution = super.run(job, jobParameters);
// jobExecution is created and accessible here
//MDC.put("execId", String.valueOf(jobExecution.getJobId()));
//MDC.put("jobName", jobExecution.getJobInstance().getJobName());
return jobExecution;
}
};
jobLauncher.setJobRepository(jobRepository);
SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
jobLauncher.setTaskExecutor(taskExecutor);
return jobLauncher;
}https://stackoverflow.com/questions/52171559
复制相似问题