網站首頁 編程語言 正文
項目地址 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的相互轉化使用統一的工具進行轉化,減少出錯,只是關系功能就可以了,不需要挨個的去對每一個參數的情況,減少工作量
原文鏈接:https://blog.csdn.net/poem_2010/article/details/120520805
相關推薦
- 2022-06-21 Android隨機給出加減乘除的四則運算算術題_Android
- 2022-07-14 Qt創建SQlite數據庫的示例代碼_C 語言
- 2022-07-26 pyspark 中dataframe 按指定字段拆分為多列或者多行
- 2022-05-13 eigen交叉編譯
- 2023-01-17 pytest內置fixture使用臨時目錄流程詳解_python
- 2022-01-18 正則——16進制顏色
- 2023-07-16 uniapp 調用拍照組件
- 2022-06-01 Python實現圖像的二進制與base64互轉_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支