springboot之异步任务

Tomcat并发请求数:500个左右,所以大型电商不得不把应用部署到多个服务器上

那么如果都是耗时请求,500个请求过来都把资源占用着,那么其他请求就处理不了
所以尽量把非关键操作定义成异步执行的,那么让主操作先返回客户一个结果
比如充值话费,马上告诉你充值成功,过好久,突然一条信息告诉你充值不成功。充值操作放在一个队列中执行。

日志操作,写日志这是系统功能,跟业务没有关系,所以属于非关键操作。那么可以异步执行。

多以需要定义异步任务,提供系统的吞吐量。

1.定义Service中的方法为异步执行方法,方法上加个注解@Async

 @Service
public class LogService {
	
	private Logger logger=LoggerFactory.getLogger(getClass());
	
	@Async//这个注解表示该方法为异步调用,和调用者的其他代码不是顺序执行的
	public String test()
	{
		//同步执行
		synchronized (this) {
			try {
			for (int i = 0; i < 100; i++) {
				logger.info(Thread.currentThread().getName()+"............异步执行");
			}
			return "执行异步任务完成";
			}catch(Exception e)
			{
				//e.printStackTrace();
				logger.info("抛出异常了:"+e.getMessage());
			}
		}
		return Thread.currentThread().getName()+"执行完毕";
	}
}

2.定义controller调用service让大家看到异步效果,controller已经返回结果了,但是service中的方法还在执行

@RestController
@EnableAsync//开启异步任务,springboot规定谁调用异步任务,那么谁开启异步任务,所以加个注解@EnableAsync
public class UserController {
	
	private Logger logger=LoggerFactory.getLogger(getClass());
	
	@Autowired
	private LogService logService;
	
	@RequestMapping("test")
	public String test()
	{
		logService.test();
		logger.info("==================>"+Thread.currentThread().getName());
		return "异步,正在解析";
	}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值