进来接手一个任务,需要做异步多线程数据源调用,数据源的配置和使用请阅读相关文章:

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);
}
}

最新文章

  1. WordPress + Nginx +PHP+MySQL
  2. JQuery实现一个简单的鼠标跟随提示效果
  3. jmx完整示例
  4. 【Android】Android Camera实时数据采集及通过MediaCodec硬编码编码数据的流程
  5. 虚拟机克隆后找不到eth0
  6. Mac OS下pip安装 pillow
  7. LNMP软件安装所在的目录详细
  8. 对linux的根目录执行强制递归移除
  9. 造字工房情书体MFQingShu_Noncommercial-Regular
  10. MySQL5.6监控表之INNODB_METRICS
  11. [转]标准C++字符串string以及MFC6.0字符串CString的tokenize和split函数
  12. sql材料分级统计及汇总案例参考
  13. uva 156 (map)
  14. 前端解读Webview
  15. Android破解——支付宝内购破解方法总结
  16. Java获取工程目录
  17. LeetCode--No.004 Median of Two Sorted Arrays
  18. BizTalk 2010/2013 EDI B2B项目实践(1)
  19. UIWebView如何加载本地图片
  20. 160506、Spring mvc新手入门(11)-返回json 字符串的其他方式

热门文章

  1. 【C#并发】00概述
  2. js 经纬度计算直线距离
  3. goweb-go语言基础
  4. redhat7.0安装postgresql
  5. raw_input|active:|continue|break|
  6. SecureCRT8.3
  7. getWeekDay TimeUtil
  8. D. Colored Boots(STL)
  9. 绿洲作业第一周 - 美术Art work
  10. LGOJ3975 TJOI2015 弦论