不调用Callable下的call()方法

时间:2016-11-24 07:07:59

标签: java spring spring-mvc

Spring MVC在基础Callable的帮助下,在一个单独的线程中调用返回的org.springframework.core.task.TaskExecutor实例,但在我的代码中却没有。{/ p>

我的控制器中的代码

  public String doSlowWork() {
            System.out.println("Start  slow work");
            try {
              Thread.sleep(3000);
            } catch (InterruptedException e) {
              e.printStackTrace();
            }
            System.out.println("Finish  slow work");
          //return "forward:/another";  // forward to another url
            return "dama/invite";       // return view's name
          }

  @RequestMapping("dama/helloAsync")
  public Callable<String> sayHelloAsync() {
      System.out.println("Entering controller");

    Callable<String> asyncTask = new Callable<String>() {

     @Override
      public String call() throws Exception {
          System.out.println("Under Callable");
        return doSlowWork();
      }
    };

    System.out.println("Leaving  controller");
    return asyncTask;
  }

我在web.xml

中提供了异步支持
 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>ABC Project</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
          /WEB-INF/applicationContext.xml
        </param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
      <async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

Servelet的-context.xml中

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:security="http://www.springframework.org/schema/security"
    xsi:schemaLocation="
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/security 
        http://www.springframework.org/schema/security/spring-security.xsd
          http://www.springframework.org/schema/task
        http://www.springframework.org/schema/task/spring-task.xsd">

    <context:component-scan base-package="com.abc.futureproject"></context:component-scan>
    <mvc:annotation-driven>
     <mvc:async-support default-timeout="30000" task-executor="taskExecutor"/>
  </mvc:annotation-driven>

    <tx:annotation-driven />
    <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="5"/>
    <property name="maxPoolSize" value="50"/>
    <property name="queueCapacity" value="10"/>
    <property name="keepAliveSeconds" value="120"/>
  </bean>

    <mvc:resources mapping="/views/**" location="/views/" />

    <!-- The below bean tells the exact location of the view resolver -->
    <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/views/pages/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans> 

但是call()确实没有被执行。

0 个答案:

没有答案