ThreadLocal: uso como información de contexto para la API REST con spring-boot

tengo algunosspring-boot aplicación (expone el resto api). La API REST mencionada está asegurada porspring-security. Todo está bien, sin embargo, ahora necesito establecer el contexto para la solicitud de servicio. El contexto de configuración se trata de elegir una fuente de datos en función del contexto del usuario. La clave es que RoutingDataSource necesita usar este contexto. (Este contexto debe establecerse directamente después de autenticar la solicitud debido a otras causas, también tengo otro hilo que usa RoutingDataSource, pero no invocado por solicitud (sin contexto de usuario)).

Puedo hacer estas cosas, sin embargo, mis dudas están relacionadas con la seguridad del contexto y la eliminación del hilo. Traté de encontrar la respuesta en los documentos, pero no pude.

public class CustomContextHolder {

   private static final ThreadLocal<DatabaseType> contextHolder = 
            new ThreadLocal<DatabaseType>();

   public static void setContext(DatabaseType databaseType) {
      contextHolder.set(databaseType);
   }

   public static CustomerType getContext() {
      return (CustomerType) contextHolder.get();
   }

   public static void clearContext() {
      contextHolder.remove();
   }
}

Y establecer contexto:

@Component
class AuthorizedRequestFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, 
                                    HttpServletResponse response, 
                                    FilterChain filterChain) throws ServletException, IOException {

        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication != null && authentication.isAuthenticated()) {
            // here we set context
        }

        filterChain.doFilter(request, response);
    }
}

Yo puedo hacerlo. Sin embargo, porquespring-boot es multihilo y estoy usandoThreadLocal para mantener el contexto, temo la seguridad de subprocesos de esta configuración.

Cuando establezco este contexto? En filtro,solo después de tener éxito autorización de solicitud. Entonces las preguntas son:

¿Es seguro para subprocesos? Significa: ¿Puedo suponer quelo mismo hilo que ejecuta filtro (por lo tanto, este hilo establece contexto en supropio local contexto) también ejecuta la solicitud completa (por ejemplo, llamar a métodos de dao, enviar respuesta, ejecutar el cuerpo del controlador)?

Si en el caso 1. Puedo suponer que un subproceso funciona con la solicitud de principio a fin (comenzar incluye filtro después de la solicitud segura), entonces cuando debería llamarclearContext() ?

Respuestas a la pregunta(4)

Su respuesta a la pregunta