java.lang.IllegalStateException: не привязан к потоку запрос, исключение в аспект

Вот мой аспект:

    @Configurable
    @Aspect
    public class TimingAspect {

        @Autowired
        private HttpServletRequest httpServletRequest;

        // Generic performance logger for any mothod
        private Object logPerfomanceInfo(ProceedingJoinPoint joinPoint, String remoteAddress) {
            StringBuilder tag = new StringBuilder();
            if (joinPoint.getTarget() != null) {
                tag.append(joinPoint.getTarget().getClass().getName());
                tag.append(".");
            }
            tag.append(joinPoint.getSignature().getName());
            StopWatch stopWatch = new StopWatch(tag.toString());
            Object result = joinPoint.proceed(); // continue on the intercepted method
            stopWatch.stop();

            PerformanceUtils.logInPerf4jFormat(stopWatch.getStartTime(), stopWatch.getElapsedTime(), stopWatch.getTag(), stopWatch.getMessage(), remoteAddress);
            return result;
        }

        @Around("execution(* $$$.$$$.$$$.api.controller.*.*(..))")
        public Object logAroundApis(ProceedingJoinPoint joinPoint) throws Throwable {
            String remoteAddress = null;
            if (httpServletRequest != null) {
               remoteAddress = httpServletRequest.getRemoteAddr();
            }
            return logPerfomanceInfo(joinPoint, remoteAddress);
        }

        @Around("execution(* $$$.$$$.$$$.$$$.$$$.$$$.*(..))")
        public Object logAroundService(ProceedingJoinPoint joinPoint) throws Throwable {
            String remoteAddress = null;
            if (httpServletRequest != null) {
                remoteAddress = httpServletRequest.getRemoteAddr();
            }
            return logPerfomanceInfo(joinPoint, remoteAddress);
        }

Я не получаю никаких ошибок во время компиляции, но я делаю следующее исключение при запуске моего сервера Jetty:

  

вложенным исключением является java.lang.IllegalStateException: нет привязки к потоку   запрос найден: Вы ссылаетесь на атрибуты запроса вне   фактический веб-запрос или обработка запроса за пределами   получая нить? Если вы действительно работаете в веб-запросе   и по-прежнему получать это сообщение, ваш код, вероятно, работает за пределами   DispatcherServlet /DispatcherPortlet: в этом случае используйте   RequestContextListener или RequestContextFilter, чтобы выставить текущий   запрос.

Здесь следует отметить одну вещь: если я удалю метод logAroundService, я не получу никаких исключений.

12 голосов | спросил riship89 4 J0000006Europe/Moscow 2014, 02:18:51

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132