Скопируйте контекстную карту MDC в рабочие потоки SimpleAsyncTaskExecutor.

Мы используем модуль spring-core 4.1.X и версии spring-batch-core 3.0.X для приложения Spring Boot. Мы используем SimpleAsyncTaskExecutor для асинхронной работы потоков. Мне нужно скопировать информацию MDC из родительского в дочерний поток. Я видел использование ThreadDecorators как лучший способ добиться этого. Но они недоступны в версии Spring, которую мы используем. Любые предложения по эквивалентным подходам с версиями Spring, которые мы используем. Если мы не можем добиться этого с помощью TaskDecorators, какие-либо предложения о том, как лучше всего ??


person poorna chandra    schedule 29.10.2018    source источник
comment
Эти ссылки могут помочь: stackoverflow.com/questions/52009107/spring-batch -mdc-logging и stackoverflow.com/ вопросы/52171559/   -  person Mahmoud Ben Hassine    schedule 30.10.2018


Ответы (1)


Я думаю, вы имеете в виду использование TaskDecorator, который был добавлен в Spring 4.3 как средство для создания собственного декоратора MDC и регистрации его в TaskExecutor, процесс, который хорошо описан в этом статья.

На самом деле это отличная идея, тем более что SimpleAsyncTaskExecutor также был обновлен в Spring 4.3 для поддержки TaskDecorators.

Если вы не можете выполнить обновление (что является рекомендуемым подходом), я не думаю, что особенно сложно расширить SimpleAsyncTaskExecutor чтобы предложить аналогичный хук, если вы видите, что на самом деле происходит под капотом.

Вот исходный коммит Task для поддержкиTask 4.3

person dimitrisli    schedule 29.10.2018
comment
Спасибо за ответ. Итак, вы имеете в виду, что мне нужно создать свой собственный класс TaskExecutor, который расширяет SimpleAsyncTaskExecutor, и написать свою собственную реализацию копирования MDC из родительского в дочерний поток и вызвать метод SimpleAsyncTaskExecutor? - person poorna chandra; 30.10.2018
comment
да. или пропустить аналогичную структуру TaskDecorator и внедрить логику MDC непосредственно в расширенный SimpleAsyncTaskExecutor. Конечно, не самое элегантное из решений, но все это на случай, если вы сможете обновиться. - person dimitrisli; 30.10.2018
comment
Спасибо. Я реализовал свой собственный TaskDecorator и вызвал из него метод SimpleAsyncTaskExecutor. Это сработало отлично - person poorna chandra; 06.11.2018
comment
Большой. Если вы нашли этот ответ полезным, вы можете проголосовать и/или принять его. - person dimitrisli; 06.11.2018