Spring Async Task正在运行

时间:2016-03-22 19:23:31

标签: spring asynchronous

春季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;
    }

}

我怎样才能阅读它?运行?

由于

1 个答案:

答案 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也可以解决很多问题。