1-介绍
Servlet 3中的异步支持为在另一个线程中处理HTTP请求提供了可能性。有一个长时间运行的任务时,当另一个线程处理这个请求时,容器线程被释放,并且可以继续为其他请求服务。
Spring框架提供的Controller中返回Callable 和 WebAsyncTask。
package test.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class TaskService {
private static final Logger log = LoggerFactory.getLogger(TaskService.class);
public String getResult(){
log.info("任务开始执行,持续等待中...");
try {
Thread.sleep(5000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("任务处理完成");
return "success";
}
}
这个web应用是用Spring Boot创建的,我们将执行下面的类来运行我们的例子:
package test;
import java.util.TimeZone;
import javax.annotation.PostConstruct;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages={"test"})
public class TestApplication extends SpringBootServletInitializer{
@PostConstruct
void started() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC+8"));
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(TestApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}