Vert.x 从入门到放弃

#前言

    花了二天的时间,想把最近弄的一个接口项目转成vert.x,为啥要用vert.x?因为我的精神老大(zzh-4k)在使用啊。就是这么简单,不需要任何理由。但今天还是选择放弃。主要原因有。1:时间不充分,后面还有好多事要做,已在转接口上花费了二天时间 ,自己感觉有点压力。2:很重要的原因,异步开发与我们平时的同步开发真的差异太大了,估计全部转过来。这一周都不用干别的活了。所以最后选择了放弃,下一个项目需要如果java写接口,再使用Vert.x试试。


#总结点代码吧

    竟然花了二天学习,多些也写了点代码,在这备份留念吧。以备下次使用。


1,Redis 封装

package com.niceclick.helpers;

import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
import io.vertx.core.json.Json;
import io.vertx.redis.RedisClient;
import io.vertx.redis.RedisOptions;

public class RedisHelper {
	
	private static RedisHelper instanct		=	new RedisHelper();
	private static RedisClient redis		=	null;
	
	public static RedisHelper init(Vertx vertx){
		if(redis ==null){
			redis	=	initRedis(vertx);
		}
		return instanct;
	}
	
	public static RedisHelper me(){
		return instanct;
	}
	private static RedisClient initRedis(Vertx vertx){
		RedisOptions config = new RedisOptions().setHost(PropHelper.me().read("redis.host")).setPort(PropHelper.me().readInt("redis.port"));
		RedisClient redis = RedisClient.create(vertx, config);
		return redis;
	}
	
	public void set(String key,Object value,int _seconds){
		redis.setex(key, _seconds,Json.encode(value),null);
	}
	
	public void set(String key,Object value,int _seconds,Handler<AsyncResult<String>> handler){
		redis.setex(key, _seconds,Json.encode(value),handler);
	}
	
	public void get(String key,Handler<AsyncResult<String>> handler){
		redis.get(key, handler);
	}
	
	public void del(String key){
		redis.del(key, null);
	}
	
	public void del(String key,Handler<AsyncResult<Long>> handler){
		redis.del(key, handler);
	}
	
	public static void main(String[] args) {
		RedisHelper _obj	=	init(Vertx.vertx());
		_obj.set("A", "B", 60);
		
		_obj.get("A", _res->{
			System.out.println(_res.result());
		});
	}
		
	
	
	
}

2,Jdbc封装

package com.niceclick.helpers;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;

import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.asyncsql.MySQLClient;
import io.vertx.ext.sql.ResultSet;
import io.vertx.ext.sql.SQLClient;
import io.vertx.ext.sql.UpdateResult;

public class JdbcHelper {

	private static JdbcHelper instanct		=	new JdbcHelper();
	private static SQLClient client		=	null;
	
	public static JdbcHelper init(Vertx vertx){
		if(client==null){
			client	=	initJdbc(vertx);
		}
		return instanct;
	}
	
	public static JdbcHelper me(){
		return instanct;
	}
	private static SQLClient initJdbc(Vertx vertx){
		PropHelper prop	= PropHelper.me();
		JsonObject config = new JsonObject()
				.put("host",prop.read("jdbc.url"))
				.put("port", prop.readInt("jdbc.port"))
				.put("database", prop.read("jdbc.db"))
				.put("username", prop.read("jdbc.username"))
				.put("password", prop.read("jdbc.password"))
				;
		
		SQLClient mySQLClient = MySQLClient.createShared(vertx, config);
		return mySQLClient;
	}
	
	public JdbcHelper findFirst(String sql,Handler<AsyncResult<JsonArray>> handler){
		client.querySingle(sql,handler);
		return this;
	}
	public JdbcHelper findFirst(String sql, JsonArray args,Handler<AsyncResult<JsonArray>> handler){
		client.querySingleWithParams(sql, args,handler);
		return this;
	}
	
	
	public JdbcHelper findList(String sql,Handler<AsyncResult<ResultSet>> handler){
		client.query(sql, handler);
		return this;
	}
	
	public JdbcHelper findList(String sql,JsonArray args,Handler<AsyncResult<ResultSet>> handler){
		client.queryWithParams(sql, args, handler);
		return this;
	}
	
	public JdbcHelper update(String sql,JsonArray args, Handler<AsyncResult<UpdateResult>> handler){
		client.updateWithParams(sql, args, handler);
		return this;
	}
	
	public JdbcHelper call(String sql,JsonArray args,JsonArray outputs, Handler<AsyncResult<ResultSet>> handler){
		client.callWithParams(sql, args, outputs, handler);
		return this;
	}
	
	public static Kv arr2Kv(List<String> columns,JsonArray array){
		Kv _kv =Kv.create();
		if(UtilsHelper.checkIsEmpty(array)){
			return _kv;
		}
		
		IntStream.range(0, columns.size()).parallel().forEachOrdered(index->{
			String field	=	columns.get(index);
			if(UtilsHelper.checkIsEmpty(field)){
				return;
			}
			_kv.set(columns.get(index), array.getValue(index));
		});
		return _kv;
	}
	
	public static void main(String[] args) {
		JdbcHelper _jdbc	=	init(Vertx.vertx());
		
		_jdbc.findFirst("select * from "+ContentHelper.TABLE_BANK, res->{
			if(res.succeeded()){
				JsonArray _lst	=	res.result();
				List<String> columns	=	new ArrayList<>();
				columns.add("id");
				columns.add("name");
				columns.add("password");
				columns.add("status");
				PrintHelper.print(arr2Kv(columns,_lst));
			}else{
				PrintHelper.print(res.cause().getMessage());
			}
		});
		
		_jdbc.findList("select * from "+ContentHelper.TABLE_BANK, res->{
			if(res.succeeded()){
				ResultSet	reset		=	res.result();	
				List<JsonArray> _lst	=	reset.getResults();
				List<String> _columnLst	=	reset.getColumnNames();
				reset.getColumnNames();
				for(JsonArray _row:_lst){
					Kv _kv	=	arr2Kv(_columnLst,_row);
					PrintHelper.print(_kv);
				}
			}else{
				PrintHelper.print(res.cause().getMessage());
			}
		});
	}

	
	
}

3,转同步转异步形式(举个例子)

#这是同步代码
	public static Kv getAssetsIntegrali(User _user){
		List<Kv> _balanceRes	=	getAccountBalance(_user.getAddressPub());
		if(Utils.checkIsEmpty(_balanceRes)){
			return Utils.error("没有积分数据.");
		}
		List<Kv> _result		=	new ArrayList<Kv>();
		Kv _allBank				=	DataHelper.getAllBank();
		
		_balanceRes.parallelStream().forEachOrdered((_item)->{
			double balance		=	Utils.formatNumber(_item.getStr("balance"));
			if(balance<1){
				return;
			}
			
			String _bank_code	=	_item.getStr("code");
			Bank _bank 			=	_allBank.getAs(_bank_code);
			UserCards _card		=	SqlHelper.findUsrCardByBankCodeAndUid(_bank_code, _user.getId());
			long _card_id		=	0;
			String _card_no		=	null;
			if(!Utils.checkIsEmpty(_card)){
				_card_id		=	_card.getId();
				_card_no		=	_card.getCardNo();
			}
			_result.add(
					Kv.by("bank_logo"	,_bank.getFilename())
					.set("bank_name"	, _bank.getName())
					.set("num"			, balance)
					.set("card_id"		, _card_id)
					.set("card_no"		,_card_no)
					.set("bank_id"		,_bank.getId())
			);
		});
		
		return Utils.success(_result);
	
#这是vert.x写的异步代码
     public static void getAssetsIntegrali(Kv user, Handler<Kv> handler) {
		List<Kv> balanceRes = getAccountBalance(user.getStr("address_pub"));
		if (UtilsHelper.checkIsEmpty(balanceRes)) {
			handler.handle(UtilsHelper.error("没有积分数据."));
			return;
		}
		
		Future<Kv> allBanks 	= Future.future();
		DataHelper.getAllBank(res->{
			allBanks.complete(res);
		});
		Future<Kv> allUserCard	=	Future.future();
		DataHelper.getAllCardForUid(user.get("id"), res->{
			allUserCard.complete(res);
		});
		Future<List<Kv>> listFuture		=Future.future();
		List<Kv> _result		=	new ArrayList<Kv>();
		balanceRes.parallelStream().forEachOrdered((_item)->{
			double balance		=	UtilsHelper.formatNumber(_item.getStr("balance"));
			if(balance<1){
				return;
			}
			
			String _bank_code	=	_item.getStr("code");
			_result.add(
					Kv.by("num"	,balance)
					.set("bank_code", _bank_code)
			);
		});
		listFuture.complete(_result);
		
		CompositeFuture.all(Arrays.asList(allBanks, allUserCard,listFuture)).setHandler(res->{
			if(res.succeeded()){
				CompositeFuture future=res.result();
				Kv	allBank	=	future.resultAt(0);
				Kv  allCard	=	future.resultAt(1);
				List<Kv>  list	=	future.resultAt(2);
				for(Kv row : list){
					Kv _bank	=	allBank.getAs(row.getStr("bank_code"));
					Kv _card	=	allCard.getAs(row.getStr("bank_code"));
					String _card_id	="";
					String _card_no	="";
					if(!UtilsHelper.checkIsEmpty(_card)){
						_card_id	=	_card.getStr("id");
						_card_no	=	_card.getStr("card_no");
					}
					row.set("bank_logo", _bank.getStr("filename"))
					.set("bank_name", _bank.getStr("name"))
					.set("card_id"		,_card_id )
					.set("card_no"		,_card_no)
					.set("bank_id"		,_bank.get("id"));
				}
				handler.handle(UtilsHelper.success(list));
			}else{
				handler.handle(UtilsHelper.error("NULL"));
			}
		});
	}	


哎,好好体会,思考方式都变了。