有些时候 需要先返回数据 ,入库 以及其他操作可以异步去执行
定义一个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