Future 異步多線程


  進來接手一個任務,需要做異步多線程數據源調用,數據源的配置和使用請閱讀相關文章:

   https://www.cnblogs.com/haoliyou/p/9604452.html

  配置好數據源后,實質上其實就是需要做一個異步的調用查詢

 

@Resource
private LoginTask loginTask;

@Override
public JSONObject getLoginResult(String username, String password) {
   JSONObject jsonObject = new JSONObject();
   jsonObject.put("ret", "-1");
   jsonObject.put("msg", "用戶名或密碼錯誤");
   Future<JSONObject> cmFutureTask = loginTask.handleCmLogin(jsonObject, username, password);
   Future<JSONObject> csFutureTask = loginTask.handleCsLogin(jsonObject, username, password);
   JSONObject taskJson = new JSONObject();
   int count = 0;
   while (count < LoginConstants.TASK_REQUEST_LIMIT) {
      try {
            if (cmFutureTask.isDone()) {
                  taskJson = cmFutureTask.get(LoginConstants.TASK_RESULT_LIMIT, TimeUnit.SECONDS);
                  if (StringUtils.equals(taskJson.getString("ret"), "0")) {
                        csFutureTask.cancel(true);
                        jsonObject = taskJson;
                        break;
                   }
           }
           if (cbsFutureTask.isDone()) {
                   taskJson = csFutureTask.get(LoginConstants.TASK_RESULT_LIMIT, TimeUnit.SECONDS);
                   if (StringUtils.equals(taskJson.getString("ret"), "0")) {
                       cmFutureTask.cancel(true);
                       jsonObject = taskJson;
                       break;
                  }
           }
          if (cmFutureTask.isDone() && csFutureTask.isDone()) {
                  if (checkAdUser(username, password)) {
                      jsonObject.put("ret", "0");
                      jsonObject.put("msg", "登錄成功!");
                      break;
                  }
             }
             count++;
             Thread.sleep(1000);
        } catch (Exception e) {
              e.printStackTrace();
        }
    }
     return jsonObject;
}

 

@Component
public class LoginTask {

   private static final Logger log = LoggerFactory.getLogger(LoginTask.class);

   @Resource
   private UserInfoMapper userInfoMapper;


   @Resource
   private UserMapper userMapper;

  /**
   * 處理發起的請求
   * 
   * @param request
   * @param requestHeaders
   * @param result
   * @param jsonObject
   * @param loginInfo
   * @return
   */
   @Async("taskExecutor")
   public Future<JSONObject> handleCmLogin(JSONObject jsonObject, String username, String password) {
        UserInfo userInfo = userInfoMapper.selectByUserId(username);
        if (userInfo == null) {
              jsonObject.put("ret", "20003");
              jsonObject.put("msg", "抱歉,目前僅支持xxxxx賬號登錄");
              return new AsyncResult<JSONObject>(jsonObject);
       } else if (!password.equals(userInfo.getPassword())) {
              log.info(userInfo.getUserName());
              jsonObject.put("ret", "20002");
              jsonObject.put("msg", "登錄失敗,請確認用戶名和密碼是否正確");
              return new AsyncResult<JSONObject>(jsonObject);
} jsonObject.put(
"data", userInfo); jsonObject.put("ret", "0"); jsonObject.put("msg", "success"); log.info(userInfo.toString()); return new AsyncResult<JSONObject>(jsonObject); } /** * 處理的請求 * * @param result * @param requestHeaders * @param jsonObject * @param loginInfo * @return */ @Async("taskExecutor") public Future<JSONObject> handleCsLogin(JSONObject jsonObject, String username, String password) { User user = userMapper.selectByUserId(username, password); if (user == null) { jsonObject.put("ret", "20002"); jsonObject.put("msg", "登錄失敗,請確認用戶名和密碼是否正確"); return new AsyncResult<JSONObject>(jsonObject); } log.info(user.toString()); jsonObject.put("data", user); jsonObject.put("ret", "0"); jsonObject.put("msg", "success"); return new AsyncResult<JSONObject>(jsonObject); }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM