命令行工具,VO和命令行之间的转化工具

项目地址
cli: 命令行工具https://gitee.com/lyw2010/cli

#### 介绍

命令行工具

把命令行转化为vo

把vo转化为命令行


## 把命令行转化为VO
使用的场景是需要用过命令行发送到应用的时候,需要自己去解析发送过来的参数,这样耗时而且容易出错,特别是在参数很多的时候,是一个棘手的问题

比如发送的命令

java -jar  xxxx.jar  --sourceDataType  "mysql" --sql  " select *from ttt where id=2222" --sourceIp  "127.0.0.1" --sourcePort  "3306" --sourceSchema  zgdc_warehouse_source --sourcePasswd  123456 --sourceUserName  root --targetDataType  mysql --targetIp  127.0.0.1 --targetPort   "3306" --targetPasswd  123456 --targetSchema  zgdc_warehouse_app --targetUserName  root --targetTable  xy_money_rate --holdTimeout  null --where  null --columns  company_name,rate --columnsName  公司名称,占比 --dataType  String,Double
public class IndicatorCalculateVO {
    @Cli(
        longOpt = "sourceDataType",
        name = "数据库类型",
        required = true,
        desc = "数据库类型"
    )
    private String sourceDataType;
    @Cli(
        longOpt = "sql",
        name = "需要执行的sql",
        required = true,
        desc = "需要执行的sql"
    )
    private String sql;
    @Cli(
        longOpt = "sourceIp",
        name = "数据源的url",
        required = true,
        desc = "数据源的url"
    )
    private String sourceIp;
    @Cli(
        longOpt = "sourcePort",
        name = "数据源的端口",
        required = true,
        desc = "数据源的端口"
    )
    private Integer sourcePort;
    @Cli(
        longOpt = "sourceSchema",
        name = "数据库",
        required = true,
        desc = "数据库"
    )
    private String sourceSchema;
    @Cli(
        longOpt = "sourcePasswd",
        name = "数据源的密码",
        required = true,
        desc = "数据源的密码"
    )
    private String sourcePasswd;
    @Cli(
        longOpt = "sourceUserName",
        name = "数据源的用户信息",
        required = true,
        desc = "数据源的用户信息"
    )
    private String sourceUserName;
    @Cli(
        longOpt = "targetDataType",
        name = "目标数据库的类型",
        required = true,
        desc = "目标数据库的类型"
    )
    private String targetDataType;
    @Cli(
        longOpt = "targetIp",
        name = "目标数据源的url",
        required = true,
        desc = "目标数据源的url"
    )
    private String targetIp;
    @Cli(
        longOpt = "targetPort",
        name = "数据源的端口",
        required = true,
        desc = "数据源的端口"
    )
    private Integer targetPort;
    @Cli(
        longOpt = "targetPasswd",
        name = "目标数据源的密码",
        required = true,
        desc = "目标数据源的密码"
    )
    private String targetPasswd;
    @Cli(
        longOpt = "targetSchema",
        name = "数据库",
        required = true,
        desc = "数据库"
    )
    private String targetSchema;
    @Cli(
        longOpt = "targetUserName",
        name = "目标数据源的用户信息",
        required = true,
        desc = "目标数据源的用户信息"
    )
    private String targetUserName;
    @Cli(
        longOpt = "targetTable",
        name = "目标数据表",
        required = true,
        desc = "目标数据表"
    )
    private String targetTable;
    @Cli(
        longOpt = "holdTimeout",
        name = "holdTimeout",
        desc = "数据保留是时长 单位是小时"
    )
    private Integer holdTimeout;
    @Cli(
        longOpt = "where",
        name = "where",
        desc = "where 查询条件"
    )
    private String where;
    @Cli(
        longOpt = "columns",
        name = "表的列",
        desc = "表的列"
    )
    private String columns;
    @Cli(
        longOpt = "columnsName",
        name = "表的列名字 多个使用逗号分隔 和columns长度一致",
        desc = "表的列名字 多个使用逗号分隔 和columns长度一致"
    )
    private String columnsName;
    @Cli(
        longOpt = "dataType",
        name = "数据类型 多个使用逗号分隔 和columns长度一致",
        desc = "数据类型 多个使用逗号分隔 和columns长度一致"
    )
    private String dataType;
}
``````

这样转化的时候,需要挨个的去选择,去识别,顺序需要严格的控制。

有了这个工具之后,只需要在接收参数地方进行一次转化就可以了

``````
object IndicatorCalculateApp {
  private[this] val logger: Logger = LoggerFactory.getLogger(classOf[IndicatorCalculateApp])

  def main(args: Array[String]): Unit = {


    logger.info(s"请求参数是:")
    val vo = CliUtils.parseObject(args, classOf[IndicatorCalculateVO])
    println(vo)
   }
}
``````

这样的参数在转化VO



这样分分钟就可以实现


## 把VO转化为 命令行
 在使用的时候,需要通过 命令行的方式,把使用的参数传给应用,操作比较麻烦
 
 比如需要把上面的IndicatorCalculateVO 通过命令行发给应用,么有专门的工具,需要自己挨个的使用
 
 使用工具之后

CliUtils.getCommandLine(vo, IndicatorCalculateVO.class);
具体的实现

 
/**
     * 获取命令行
     *
     * @param entry 实体
     * @param <T>   需要转化的vo
     * @return 命令行
     */
    private static <T> String getCommandLineWithException(T entry) throws IntrospectionException, InvocationTargetException, IllegalAccessException {
        Class<T> clazz = (Class<T>) entry.getClass();
        return getCommandLine(entry, clazz);
    }
这样,参数和vo的相互转化使用统一的工具进行转化,减少出错,只是关系功能就可以了,不需要挨个的去对每一个参数的情况,减少工作量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值