#前言
花了二天的时间,想把最近弄的一个接口项目转成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")); } }); }
哎,好好体会,思考方式都变了。