spring boot 集成Async 注解 异步处理

有些时候 需要先返回数据 ,入库 以及其他操作可以异步去执行

定义一个task 任务类 :

@Component
public class Task {
@Autowired
public RedisDao redisDao;

@Autowired
public UserOperatorService userOperatorService;
@Async
public void  AsyncTokenInfo(String token,JSONObject jsonObject) throws ParseException {
    //提取手机号码 查询该用户是否存在
    String phone = jsonObject.getString("phone");
    Long user_id = 0L;
    Long user_child_id = 0L;
    //不存在则解析注册用戶
    user_id =  userOperatorService.addOrUpdateUser(jsonObject);;
    //注冊小孩 学生
    user_child_id = userOperatorService.addUserChild(jsonObject, user_id, user_child_id);
    //注册老师
    userOperatorService.addUserTeacher(jsonObject, user_id);

    //保存token的key
    String ybbLoginPhone = RedisKeys.getRedisKey(RedisKeys.RootKey.ybbLoginPhone, phone);
    boolean phone_exists = redisDao.exists(ybbLoginPhone);
    if (phone_exists) {
        String token_old = (String) redisDao.get(ybbLoginPhone);
        String ybbLoginToken = RedisKeys.getRedisKey(RedisKeys.RootKey.ybbLoginToken, token_old);
        redisDao.remove(ybbLoginToken);
    }
    JSONObject ybbJson = new JSONObject();
    ybbJson.put("phone", phone);
    ybbJson.put("user_id", user_id);
    ybbJson.put("user_child_id", user_child_id);
    redisDao.set(RedisKeys.getRedisKey(RedisKeys.RootKey.ybbLoginToken, token), ybbJson.toJSONString(), 24 * 60 * 60 * 30);
    redisDao.set(ybbLoginPhone, token);
}


/***======================**/
//定义一个随机对象.
public static Random random =new Random();

@Async  //加入"异步调用"注解
public void doTaskOne() throws InterruptedException {
    System.out.println("开始执行任务一");
    long start = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    long end = System.currentTimeMillis();
    System.out.println("完成任务一,耗时:" + (end - start) + "毫秒");
}

@Async
public void doTaskTwo() throws InterruptedException {
    System.out.println("开始执行任务二");
    long start = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    long end = System.currentTimeMillis();
    System.out.println("完成任务二,耗时:" + (end - start) + "毫秒");
}

@Async
public void doTaskThree() throws InterruptedException {
    System.out.println("开始执行任务三");
    long start = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    long end = System.currentTimeMillis();
    System.out.println("完成任务三,耗时:" + (end - start) + "毫秒");
}

}

定义一个controller 调试这个task 或者写个单元测试

现在写个controller
@ResponseBody
@RequestMapping(“/task”)
public String task() throws Exception {
System.out.println(“开始执行Controller任务”);
long start = System.currentTimeMillis();
task.doTaskOne();
task.doTaskTwo();
task.doTaskThree();
long end = System.currentTimeMillis();
System.out.println(“完成Controller任务,耗时:” + (end - start) + “毫秒”);
return “success”;
}

通过访问 localhost:8088/task
多次执行 可以发现 想返回success
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值