SpringBoot异步任务实现方法

异步任务使用场景

在很多情况下,比如邮件发送,文件上传或者下载的时候,由于时间较长,经常会出现用户需要很长时间才会得到响应,为了优化用户体验,比如先进行页面跳转,显示已经开始进行邮件发送或者下载上传文件等信息,等任务结束再返回成功信息,这就采取了异步的方式进行任务调度。

异步任务的实现

首先我们可以模拟一个网站跳转的过程,假设某一个线程执行某个任务需要3秒,结束以后才会进行下一步,我们令线程休眠三秒,然后通过controller进行页面跳转,代码如下:

Service层

@Service
public class AsyncService {
    
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据正在处理");
    }
}

Controller层

@RestController
public class AsyncController {

    @Autowired
    private AsyncService asyncService;

    @RequestMapping("/hello")
    public String hello(){
        asyncService.hello();
        return "OK";
    }
}

这时用户点击需要等待三秒才会跳转到新页面并显示OK,此时由于用户体验极差,大概率下用户会直接关闭该网页,因此需要通过多线程的方式来实现异步任务调度,而SpringBoot则可以使用更简便的方式来实现异步任务调度。我们只需要在Service层需要多线程处理的方法上加上@Async注解。

@Service
public class AsyncService {
    @Async
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据正在处理");
    }
}

然后在主启动类上加上**@EnableAsync**注解来开启异步注解功能即可执行异步任务调度,此时执行可立即跳转然后再执行hello方法来输出“数据正在处理”。

//开启异步注解功能
@EnableAsync
@SpringBootApplication
public class SpringbootTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootTestApplication.class, args);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值