Package com.sishuok.chapter3.web.listener

Source Code of com.sishuok.chapter3.web.listener.ListenerController

/**
* Copyright (c) 2005-2012 https://github.com/zhangkaitao
*
* Licensed under the Apache License, Version 2.0 (the "License");
*/
package com.sishuok.chapter3.web.listener;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.context.request.async.WebAsyncTask;

import java.util.concurrent.Callable;

/**
*
* 测试时开启springmvc-config.xml中的mvc:deferred-result-interceptors
*
* <p>User: Zhang Kaitao
* <p>Date: 13-7-18 下午9:16
* <p>Version: 1.0
*/
@Controller
public class ListenerController {

    @RequestMapping("/listener1")
    @ResponseBody
    public DeferredResult<String> listener1() {
        final DeferredResult<String> result = new DeferredResult<String>();
        result.onTimeout(new Runnable() {
            @Override
            public void run() {
                System.out.println("===异步任务超时了");
            }
        });

        result.onCompletion(new Runnable() {
            @Override
            public void run() {
                System.out.println("===异步任务完成了");
            }
        });

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2 * 1000L);
                } catch (InterruptedException e) {
                }
                System.out.println("设置DeferredResult的成功时结果");
                result.setResult("success");
            }
        }).start();
        return result;
    }

    @RequestMapping("/listener2")
    @ResponseBody
    public DeferredResult<String> listener2() {
        final DeferredResult<String> result = new DeferredResult<String>();
        result.onTimeout(new Runnable() {
            @Override
            public void run() {
                System.out.println("===异步任务超时了");
                result.setErrorResult("error");
            }
        });

        result.onCompletion(new Runnable() {
            @Override
            public void run() {
                System.out.println("===异步任务完成了");
            }
        });

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(31 * 1000L);
                } catch (InterruptedException e) {
                }
                System.out.println("设置DeferredResult的成功时结果(将发生在异步任务完成后执行,因为超时了,结果无效)");
                result.setResult("success");
            }
        }).start();
        return result;
    }


    @RequestMapping("/listener3")
    @ResponseBody
    public WebAsyncTask<String> listener3() {
        long timeout = 10L * 1000; //自定义超时时间 10秒
        final WebAsyncTask webAsyncTask = new WebAsyncTask(timeout, new Callable() {
            @Override
            public String call() throws Exception {
                Thread.sleep(2L * 1000);
                return "success";
            }
        });

        webAsyncTask.onTimeout(new Callable() {
            @Override
            public Object call() throws Exception {
                System.out.println("====异步任务超时了");
                return "error";
            }
        });

        webAsyncTask.onCompletion(new Runnable() {
            @Override
            public void run() {
                System.out.println("===异步任务完成了");
            }
        });

        return webAsyncTask;
    }

    @RequestMapping("/listener4")
    @ResponseBody
    public WebAsyncTask<String> listener4() {
        long timeout = 10L * 1000; //自定义超时时间 10秒
        final WebAsyncTask webAsyncTask = new WebAsyncTask(timeout, new Callable() {
            @Override
            public String call() throws Exception {
                Thread.sleep(20L * 1000);
                return "success";
            }
        });

        webAsyncTask.onTimeout(new Callable() {
            @Override
            public Object call() throws Exception {
                System.out.println("====异步任务超时了");
                return "error";
            }
        });

        webAsyncTask.onCompletion(new Runnable() {
            @Override
            public void run() {
                System.out.println("===异步任务完成了");
            }
        });

        return webAsyncTask;
    }
}
TOP

Related Classes of com.sishuok.chapter3.web.listener.ListenerController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.