我试图在计划的函数内初始化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后停止。我现在应该怎么做 。
答案 0 :(得分:0)
这永远不会奏效。作为RequestContextHolder
状态的javadoc
Holder类以线程绑定的形式公开Web请求
RequestAttributes
对象。
换句话说,Servlet容器的请求处理线程将RequestAttributes
存储在static
的{{1}} ThreadLocal
字段中。如果您在同一个主题中,则可以通过此持有者再次检索它。
但是,由于你有一个RequestContextHolder
/ @Async
(它应该只是一个或另一个)方法,所以在一个完全不同的线程上调用该方法。它无法访问其他线程的任何值。 @Scheduled
秒。