首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问MDC的职务信息

访问MDC的职务信息
EN

Stack Overflow用户
提问于 2018-09-04 17:46:20
回答 1查看 356关注 0票数 1

我在和MDC记录工作信息。我有一个名为CommonBatchConfiguration的文件,它处理线程和日志作业信息。我想记录任何可能运行的作业,比如jobNameexecutionId

我有这样的发射器:

代码语言:javascript
复制
@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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-04 19:35:13

当调用修饰runnable时,应该已经创建了作业执行。问题是如何在这一点上访问它?我不确定这是否很容易,除非您能够在一个匿名内部类实例(由Spring创建的runnable )的方法中内省一个最终变量,这个方法封装在一个匿名内部类实例中(您的装饰器) :-)

我想记录任何可能运行的作业,比如jobName和executionId。

你可能不需要有一个任务装饰师。您可以做的是子类SimpleJobLauncher和重写run,如下所示:

代码语言:javascript
复制
@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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52171559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档