我试图在计划的函数内初始化请求,但请求的启动不起作用?

时间:2015-12-18 05:41:24

标签: spring-mvc spring-scheduled

我试图在计划的函数内初始化HttpServletRequest并根据cron作业执行操作。但是在启动请求后函数停止了。我现在应该怎么做 ? 我正在春天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后停止。我现在应该怎么做 。

1 个答案:

答案 0 :(得分:0)

这永远不会奏效。作为RequestContextHolder状态的javadoc

  

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

换句话说,Servlet容器的请求处理线程将RequestAttributes存储在static的{​​{1}} ThreadLocal字段中。如果您在同一个主题中,则可以通过此持有者再次检索它。

但是,由于你有一个RequestContextHolder / @Async(它应该只是一个或另一个)方法,所以在一个完全不同的线程上调用该方法。它无法访问其他线程的任何值。 @Scheduled秒。