進來接手一個任務,需要做異步多線程數據源調用,數據源的配置和使用請閱讀相關文章:
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); }
}