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

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

Future 异步多线程的更多相关文章

  1. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  2. Future 异步回调 大起底之 Java Future 与 Guava Future

    目录 写在前面 1. Future模式异步回调大起底 1.1. 从泡茶的案例说起 1.2. 何为异步回调 1.2.1. 同步.异步.阻塞.非阻塞 1.2.2. 阻塞模式的泡茶案例图解 1.2.3. 回 ...

  3. 初学Python之异步多线程:sockserver

    异步多线程:服务端 import socketserver class MyServer(socketserver.BaseRequestHandler): def setup(self): pass ...

  4. .NET 异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消

    今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...

  5. 异步多线程 Async

    进程:进程是一个程序在电脑运行时,全部资源的合集叫进程 线程:是程序的最小执行单位,包含计算资源,任何一个操作的响应都是线程完成的.   多线程:多个线程并发执行   Thread 是.net框架封装 ...

  6. PowerShell 中 RunspacePool 执行异步多线程任务

    在 PowerShell 中要执行任务脚本,现在通常使用 Runspace,效率很高:任务比较多时,用 Runspace pool 来执行异步操作,可以控制资源池数量,就像 C# 中的线程池一样 == ...

  7. .Net进阶系列(11)-异步多线程(委托BeginInvoke)(被替换)

    一. BeginInvoke最后两个参数的含义 倒数第二个参数:指该线程执行完毕后的回调函数:倒数第一个参数:可以向回调函数中传递参数. 下面以一段代码说明: /// <summary> ...

  8. .Net进阶系列(10)-异步多线程综述(被替换)

    一. 综述 经过两个多个周的整理,异步多线程章节终于整理完成,如下图所示,主要从基本概念.委托的异步调用.Thread多线程.ThreadPool多线程.Task.Parallel并行计算.async ...

  9. NET 异步多线程,THREAD,THREADPOOL,TASK,PARALLEL

    .NET 异步多线程,THREAD,THREADPOOL,TASK,PARALLEL,异常处理,线程取消 今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主 ...

随机推荐

  1. netty 百度网盘 密码

    netty基础 https://pan.baidu.com/s/1v_ME49LIef1Kwga8z2QbDw?spm=a1z09.2.0.0.680b2e8d5LI8S0   zb7u mina n ...

  2. java基础一(2020.1.3)

    今日学习内容: 带命令行参数的Java实例 Java的程序结构 Java的变量与常量 带命令行参数的Java实例: class ArgsDemo{ public static void main(St ...

  3. Java--Runtime.addShutdownHook

    转自:http://kim-miao.iteye.com/blog/1662550 一.Runtime.addShutdownHook理解 在看别人的代码时,发现其中有这个方法,便顺便梳理一下. vo ...

  4. github新手使用教程

    1.首先打开https://github.com/官网 注册一个github账号 2.注册成功之后,登录账号,创建一个属于自己的库 3.创建完成之后,为了方便电脑上的代码上传到github 仓库上,要 ...

  5. 吴裕雄--天生自然 PYTHON3开发学习:MySQL - mysql-connector 驱动

    import mysql.connector mydb = mysql.connector.connect( host="localhost", # 数据库主机地址 user=&q ...

  6. Git log 中文乱码

    以下三条命令搞定(系统是centos  7.4) git config --global i18n.commitencoding utf-8 git config --global i18n.logo ...

  7. django-cors设置

    MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware. ...

  8. android物理动画、Kotlin客户端、架构组件、菜单效果、应用选择器等源码

    Android精选源码 Android一个有趣的Android动画交互设计 android可伸缩日历效果源码 关于界面,全新的卡片风格,支持夜晚模式 Android 用 Kotlin 实现的基于物理的 ...

  9. Oauth2 初步

    搭建一个最简单的 Oauth2 认证服务 基于 Springboot2,在 pom.xml 中引入 Oauth2: 123456789101112 <dependency> <gro ...

  10. Linux基础篇八:VIM

    新知识: 普通模式光标跳转: G     ##光标跳转到末端  (shift +g) gg   ##光标跳转到开端 Ngg 15gg  ##光标跳转到当前文本中的15行 $     ##光标移动到当前 ...