[SPRING] MDC에 대한 작업 정보를 액세스
SPRINGMDC에 대한 작업 정보를 액세스
나는 MDC와 직업 정보를 기록하기 위해 노력하고있어. 나는 스레딩 및 로깅 작업 정보를 처리라는 파일 CommonBatchConfiguration 있어요. 나는 실행할 수있는 작업에 대한 작업 이름과 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)까지 제공
해결법
-
==============================
1.당신의 장식 실행 가능한가 호출 될 때 작업 실행이 이미 만들어야합니다. 문제는이 시점에서에 접근하는 방법은? 당신은 익명의 내부 클래스 인스턴스의 방법 익명의 내부 클래스 인스턴스 (당신의 장식)에 싸여 (스프링 배치에 의해 생성 된 실행 가능)에서 최종 변수를 성찰 할 수 있습니다하지 않는 한이 :-) 쉬운 것입니다 있는지 확실하지 않습니다
당신의 장식 실행 가능한가 호출 될 때 작업 실행이 이미 만들어야합니다. 문제는이 시점에서에 접근하는 방법은? 당신은 익명의 내부 클래스 인스턴스의 방법 익명의 내부 클래스 인스턴스 (당신의 장식)에 싸여 (스프링 배치에 의해 생성 된 실행 가능)에서 최종 변수를 성찰 할 수 있습니다하지 않는 한이 :-) 쉬운 것입니다 있는지 확실하지 않습니다
당신은 아마 작업 장식을 가질 필요가 없습니다. 당신이 할 수있는 것은 서브 클래스 SimpleJobLauncher 및 재정의 실행, 같은 것입니다 :
@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; }
from https://stackoverflow.com/questions/52171559/accessing-job-information-for-mdc by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 어떻게 봄 @Configuration 클래스에 HikariCP와 데이터 소스를 구성하는 방법? (0) | 2019.10.03 |
---|---|
[SPRING] 어떻게 ID로 봄 의존성을 주입합니까? (0) | 2019.10.03 |
[SPRING] 봄 데이터 Elasticsearch이 날짜 java.time.LocalDateTime와 함께 작동하도록하는 방법 (0) | 2019.10.03 |
[SPRING] / 활성화 봄 프로파일을 사용하여 web.xml에 필터를 해제 (0) | 2019.10.03 |
[SPRING] 봄 보안 - 페이지를 로그인 매개 변수를 전달 (0) | 2019.10.03 |