【发布时间】:2021-05-30 18:36:48
【问题描述】:
我正在使用 Spring 开发 Java Web 应用程序。
我想做的是,在用户进入页面后,代码开始每 10 秒运行一次函数,跟踪执行最后一个操作的时间。
我尝试使用调度程序来执行此操作,但它会立即开始运行 - 而不仅仅是在用户进入页面之后。
@Scheduled(fixedRate = 60000)
public void run(String param) {
//just an example of action to be performed repeatedly
System.out.println("Previously performed action was " + new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(previousActionTime)) + " with " + param);
//update previousActionTime
previousActionTime.setSeconds(previousActionTime.getSeconds() + 10);
}
此外,我不知道存储上次操作自动操作执行时间的便捷方式。
在浏览页面时应该以某种方式激活调度程序:
@RequestMapping(value = "/hellopage", method = { RequestMethod.POST, RequestMethod.GET })
public String hellopage(HttpServletRequest request, HttpServletResponse response) {
// Activate scheduler
run(request.getParameter("param1"))
...
}
调度程序(或任何执行自动化操作的程序)应该在用户再次访问触发自动化操作的同一网页时立即停止,并且应该在后台运行而不阻止任何其他代码的执行(准确地说,我不能只需在映射到页面 URL 请求的函数中使用 Sys.sleep 放置一个 while 循环,为什么页面应该做其他事情)
有什么帮助吗?
【问题讨论】:
-
您对这些自动化操作的具体计划是什么?在我看来,您应该让调度程序部分在您的网络应用程序中运行。可能是一段 javascript,每 10 秒向服务器发送一次触发器。如果您使用调度程序运行它,您将如何检测用户是否仍在页面上并避免无限运行的调度程序?
-
调度程序需要执行的操作是一个 SQL 查询,用于从数据库中获取一些数据并将其发送到我的 Java 程序以执行一些计算。如何避免无限运行调度程序 - 不幸的是不知道。
标签: java spring web-applications