春季4.2.5 Java 7 Tomcat 7
我想检查运行的异步任务。运行时检查progess任务。控制器作为异步任务运行。 hello.jsp包含jQuery函数(timer)来查看进度服务(itRunning)。
控制器
@Controller
public class HelloController {
@Inject
private RouteService routeService;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String printRoute() {
try {
Future<Plane> plane = routeService.execute();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return "hello";
}
@RequestMapping(value = "/status")
@ResponseBody
public String fetchStatus() {
--> Here return itRunning
}
}
服务
@Component("routeService")
public class RouteService {
@Inject
private Route route;
@Async
public Future<Plane> execute() {
Plane plane = route.execute();
return new AsyncResult<Plane>(boat);
}
}
的AsyncTask
public class Route
{
private int itRunning=0;
public Plane execute() {
itRunning++;
}
public int getItRunning() {
return itRunning;
}
}
我怎样才能阅读它?运行?
由于
答案 0 :(得分:0)
您的方法可能很复杂,可能无法实现。
关键点是在下面的代码中
SELECT [Tenant Name], ID, TnID, PrId
FROM (
SELECT
*
, ROW_NUMBER() OVER (PARTITION BY TnID ORDER BY ID) AS row_num
FROM (
SELECT DISTINCT
[Tenant Name]
, ctc.ID
, cct.TnID
, PrId
FROM
CARL_Tenant_Contacts ctc
JOIN CARL_Current_Tenants cct ON cct.ID = ctc.TnID
WHERE
[Tenant Name] IS NOT NULL
AND [Tenant Name] != ''
) foo
) bar
WHERE row_num = 1
用于检查进度是否会在另一个线程(将为Web请求提供服务的线程)中运行,这将尊重将为您的异步任务提供服务的线程。 对于您的控制器,将无法回溯有关异步任务进展的信息。
更好的方法可能是使用websocket,其中你的asynctask发布了进步。有关如何使用Spring yon中的Web套接字可以查看官方文档http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/和https://spring.io/guides/gs/messaging-stomp-websocket/以查看示例。
我希望这可以帮到你,因为即使可以出现复杂的使用websocket也可以解决很多问题。