Мы используем модуль spring-core 4.1.X и версии spring-batch-core 3.0.X для приложения Spring Boot. Мы используем SimpleAsyncTaskExecutor для асинхронной работы потоков. Мне нужно скопировать информацию MDC из родительского в дочерний поток. Я видел использование ThreadDecorators как лучший способ добиться этого. Но они недоступны в версии Spring, которую мы используем. Любые предложения по эквивалентным подходам с версиями Spring, которые мы используем. Если мы не можем добиться этого с помощью TaskDecorators, какие-либо предложения о том, как лучше всего ??
Скопируйте контекстную карту MDC в рабочие потоки SimpleAsyncTaskExecutor.
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 для поддержки TaskDecorator
s.
Если вы не можете выполнить обновление (что является рекомендуемым подходом), я не думаю, что особенно сложно расширить SimpleAsyncTaskExecutor
чтобы предложить аналогичный хук, если вы видите, что на самом деле происходит под капотом.
Вот исходный коммит Task для поддержкиTask 4.3
person
dimitrisli
schedule
29.10.2018
Спасибо за ответ. Итак, вы имеете в виду, что мне нужно создать свой собственный класс TaskExecutor, который расширяет SimpleAsyncTaskExecutor, и написать свою собственную реализацию копирования MDC из родительского в дочерний поток и вызвать метод SimpleAsyncTaskExecutor?
- person poorna chandra; 30.10.2018
да. или пропустить аналогичную структуру TaskDecorator и внедрить логику MDC непосредственно в расширенный SimpleAsyncTaskExecutor. Конечно, не самое элегантное из решений, но все это на случай, если вы сможете обновиться.
- person dimitrisli; 30.10.2018
Спасибо. Я реализовал свой собственный TaskDecorator и вызвал из него метод SimpleAsyncTaskExecutor. Это сработало отлично
- person poorna chandra; 06.11.2018
Большой. Если вы нашли этот ответ полезным, вы можете проголосовать и/или принять его.
- person dimitrisli; 06.11.2018