sys0613的gravatar头像
sys06132020-01-30 15:42:23

SSM框架后台如何异步操作?

SSM框架,后台接收前台数据,要生成文件并FTP上传到服务器A,

只能接收前台数据以后,启动新线程,给前端返回成功页面呗?还有什么好的操作方式么?

谢谢了,就是ssmkua框架,别建议用别的框架什么的。前端不能等待文件上传以后再返回。

就是需要耗时ftp传文件,还要给前端即时返回响应。大家有什么建议,谢谢了。

所有回答列表(1)
大反派的gravatar头像
大反派 LV92月28日

如果要异步操作,就是请求后台后,让后台单独启动一个线程来处理数据生成文件,来减小controller的压力有很多种方法,java.util.concurrent.Callable就能实现。

import java.util.concurrent.Callable;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.async.DeferredResult;

import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.utility.RandomString;

/**
 * 
 * @author peter
 *
 */
@RestController
@Slf4j
public class AsyncController {

	@Autowired
	private MockQueue mockQueue;

	@Autowired
	private DeferredResultHolder deferredResultHolder;

	@GetMapping("/order")
	public Callable<String> order() throws Exception {
		log.info("主线程开始");
		Callable<String> callable = new Callable<String>() {

			@Override
			public String call() throws Exception {
				log.info("副线程开始");
				Thread.sleep(1000);
				log.info("副线程返回");
				return "success";
			}
		};
		log.info("主线程返回");
		return callable;
	}

}

至于前端,应为上传文件是一个过程,一定是要等待的,但是可以用ajax来提交,这样就不会阻塞页面,用户只要不刷新页面,在当前也页面想怎么操作都行。

DeferredResult是另一种方法。

 

可能还有其他骚操作,就太复杂了,不提了。

 

顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友