различные thread local based контексты: org.springframework.web.context.request.RequestContextHolder, org.slf4j.MDC и прочие.
Вот значения из них не доступны в корутинах, так как, в общем случае, нет гарантий, что корутина исполняется в том же потоке, что и вызывающий код.
Собственно вопрос в том, какие есть подходы и практики для проброса внутрь корутин таких контекстов?
Самое лучшее - это сделать свой ключ в coroutine context. И работать с ним по аналогии с threadlocal, это будет coroutineLocal
Ну то есть, пробрасывать только ключ параметром, а по нему доставать контекст. Я верно понял?
Создается новый ключ и дальше он подпихиватся в билдере типа launch(MyKey(value)){ а достается как coroutineContext[MyKey]
Для MDC есть готовая интеграция, для остального смотрите ThreadCoroutineContext ThreadContextElement
Обсуждают сегодня