Использование ScopedValue вместо нитолокального в сервисном фильтре в приложении Spring BootJAVA

Программисты JAVA общаются здесь
Anonymous
Использование ScopedValue вместо нитолокального в сервисном фильтре в приложении Spring Boot

Сообщение Anonymous »

Наше приложение в значительной степени использует Threadlocals, где мы читаем значения из параметров ServletRequest и предоставляем тезисы в качестве глобального контекста на уровне потока для других служб.

Код: Выделить всё

@Component
@Order(1)
public class ParameterHandlingFilter implements Filter {

public static ThreadLocal EXAMPLE = new ThreadLocal();

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;

EXAMPLE.set(req.getParameter("example"));
try {
chain.doFilter(request, response);
}finally {
EXAMPLE.remove();
}
}
}
< /code>
Множество статей, которые предлагают использовать предварительно просмотренную функцию значений общеобразовательных значений в качестве лучшего подхода, особенно с учетом виртуальных тем. Sonarqube. < /p>
public class ParameterHandlingFilterScopedValue implements Filter {

public static final ScopedValue EXAMPLE = ScopedValue.newInstance();

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest req = (HttpServletRequest) request;

ScopedValue.where(EXAMPLE, req.getParameter("example")).run(() -> {
try {
chain.doFilter(request, response);
}
catch (Exception e) {
throw new RuntimeException(e);
}
});
}
}
Есть ли лучшее решение для этого использования?

Подробнее здесь: https://stackoverflow.com/questions/795 ... g-boot-app

Вернуться в «JAVA»