Есть ещё один хак, во всех спринговых holderах существует стратегия хранения, на память помню, что одна использует ThreadLocal, вторая InheritableThreadLocal. Можно выставить стратегию на inheritable, что это значит: при создании треда, треду потомку передаётся значение контекста родителя. Но, это работает, только если вы явно создаёте тред, а не используете пул с уже созданным кол-вом.
она не сработает с тредпулами