【问题标题】:Copy MDC context map to worker threads of SimpleAsyncTaskExecutor将 MDC 上下文映射复制到 SimpleAsyncTaskExecutor 的工作线程
【发布时间】:2018-10-29 19:48:48
【问题描述】:

我们正在使用 spring-core 4.1.X 模块和 spring-batch-core 3.0.X 版本用于 Spring Boot 应用程序。我们正在使用 SimpleAsyncTaskExecutor 进行线程的异步工作。我需要将 MDC 信息从父线程复制到子线程。我已经看到使用 ThreadDecorators 是实现这一目标的最佳方式。但是,我这些在我们使用的 spring 版本中不可用。关于我们正在使用的 spring 版本的等效方法的任何建议。如果我们无法使用 TaskDecorators 来实现,有什么其他最好方法的建议吗??

【问题讨论】:

标签: spring-batch mdc


【解决方案1】:

我认为您指的是在 Spring 4.3 中添加的TaskDecorator 的用法作为to create a custom MDC decorator and register it in a TaskExecutor, a process that is nicely described in this article 的一种手段。

实际上这是一个好主意,特别是因为 SimpleAsyncTaskExecutor 在 Spring 4.3 中也已升级为支持 TaskDecorators。

如果您无法升级(这是推荐的方法),我认为扩展 SimpleAsyncTaskExecutor to offer a similar hook if you see what is actually happening under the hood 并不是特别困难。

Here's the original commit on version 4.3 for SimpleAsyncTaskExecutor to support TaskDecorator's

【讨论】:

  • 感谢您的回复。所以你的意思是,我需要创建我自己的扩展 SimpleAsyncTaskExecutor 的 TaskExecutor 类,并编写我自己的将 MDC 从父线程复制到子线程并调用 SimpleAsyncTaskExecutor 方法的实现?
  • 是的。或者跳过TaskDecorator类似的结构,直接在扩展的SimpleAsyncTaskExecutor中嵌入MDC逻辑。当然不是最优雅的解决方案,但如果你可以升级的话。
  • 谢谢。我已经实现了自己的 TaskDecorator 并从中调用了 SimpleAsyncTaskExecutor 的方法。效果很好
  • 太棒了。如果您发现此答案有用,您可以投票和/或接受它。
猜你喜欢
  • 2013-05-24
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多