1

我正在尝试在计划的函数中初始化 HttpServletRequest 并根据 cron 作业执行操作。但该功能在初始化请求后停止。我现在该怎么办 ?我正在研究spring mvc。这是我的代码:

@Scheduled(cron = "0 0 1 * * ?")
@Async
public void PerformActionFunction() throws NoSuchAlgorithmException, ParseException {
    System.out.println("hello 1");
    HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

        System.out.println("hello 2");

    ModelMap model =  new ModelMap();

    FunctionForDate(request,model);


}

输出打印 hello 1 但不打印 hello 2 。该函数在初始化 HttpServletRequest 后停止。我现在该怎么办 。

4

1 回答 1

0

这永远不会奏效。作为RequestContextHolder各州的 javadoc

Holder 类以线程绑定 RequestAttributes对象的形式公开 Web 请求。

换句话说,Servlet 容器的请求处理线程将RequestAttributes. 如果你在同一个线程中,你可以通过这个持有者再次检索它。static ThreadLocalRequestContextHolder

但是,由于您有一个@Async/ @Scheduled(它实际上应该只是一个或另一个)方法,因此该方法正在一个完全不同的线程上调用。它无权访问其他线程的任何值ThreadLocal

于 2015-12-18T06:09:14.847 回答