網(wǎng)站首頁 編程語言 正文
項目地址 cli: 命令行工具https://gitee.com/lyw2010/cli #### 介紹 命令行工具 把命令行轉化為vo 把vo轉化為命令行 ## 把命令行轉化為VO 使用的場景是需要用過命令行發(fā)送到應用的時候,需要自己去解析發(fā)送過來的參數(shù),這樣耗時而且容易出錯,特別是在參數(shù)很多的時候,是一個棘手的問題 比如發(fā)送的命令
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 = "數(shù)據(jù)庫類型",
required = true,
desc = "數(shù)據(jù)庫類型"
)
private String sourceDataType;
@Cli(
longOpt = "sql",
name = "需要執(zhí)行的sql",
required = true,
desc = "需要執(zhí)行的sql"
)
private String sql;
@Cli(
longOpt = "sourceIp",
name = "數(shù)據(jù)源的url",
required = true,
desc = "數(shù)據(jù)源的url"
)
private String sourceIp;
@Cli(
longOpt = "sourcePort",
name = "數(shù)據(jù)源的端口",
required = true,
desc = "數(shù)據(jù)源的端口"
)
private Integer sourcePort;
@Cli(
longOpt = "sourceSchema",
name = "數(shù)據(jù)庫",
required = true,
desc = "數(shù)據(jù)庫"
)
private String sourceSchema;
@Cli(
longOpt = "sourcePasswd",
name = "數(shù)據(jù)源的密碼",
required = true,
desc = "數(shù)據(jù)源的密碼"
)
private String sourcePasswd;
@Cli(
longOpt = "sourceUserName",
name = "數(shù)據(jù)源的用戶信息",
required = true,
desc = "數(shù)據(jù)源的用戶信息"
)
private String sourceUserName;
@Cli(
longOpt = "targetDataType",
name = "目標數(shù)據(jù)庫的類型",
required = true,
desc = "目標數(shù)據(jù)庫的類型"
)
private String targetDataType;
@Cli(
longOpt = "targetIp",
name = "目標數(shù)據(jù)源的url",
required = true,
desc = "目標數(shù)據(jù)源的url"
)
private String targetIp;
@Cli(
longOpt = "targetPort",
name = "數(shù)據(jù)源的端口",
required = true,
desc = "數(shù)據(jù)源的端口"
)
private Integer targetPort;
@Cli(
longOpt = "targetPasswd",
name = "目標數(shù)據(jù)源的密碼",
required = true,
desc = "目標數(shù)據(jù)源的密碼"
)
private String targetPasswd;
@Cli(
longOpt = "targetSchema",
name = "數(shù)據(jù)庫",
required = true,
desc = "數(shù)據(jù)庫"
)
private String targetSchema;
@Cli(
longOpt = "targetUserName",
name = "目標數(shù)據(jù)源的用戶信息",
required = true,
desc = "目標數(shù)據(jù)源的用戶信息"
)
private String targetUserName;
@Cli(
longOpt = "targetTable",
name = "目標數(shù)據(jù)表",
required = true,
desc = "目標數(shù)據(jù)表"
)
private String targetTable;
@Cli(
longOpt = "holdTimeout",
name = "holdTimeout",
desc = "數(shù)據(jù)保留是時長 單位是小時"
)
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 = "數(shù)據(jù)類型 多個使用逗號分隔 和columns長度一致",
desc = "數(shù)據(jù)類型 多個使用逗號分隔 和columns長度一致"
)
private String dataType;
}
``````
這樣轉化的時候,需要挨個的去選擇,去識別,順序需要嚴格的控制。
有了這個工具之后,只需要在接收參數(shù)地方進行一次轉化就可以了
``````
object IndicatorCalculateApp {
private[this] val logger: Logger = LoggerFactory.getLogger(classOf[IndicatorCalculateApp])
def main(args: Array[String]): Unit = {
logger.info(s"請求參數(shù)是:")
val vo = CliUtils.parseObject(args, classOf[IndicatorCalculateVO])
println(vo)
}
}
`````` 這樣的參數(shù)在轉化VO 這樣分分鐘就可以實現(xiàn) ## 把VO轉化為 命令行 在使用的時候,需要通過 命令行的方式,把使用的參數(shù)傳給應用,操作比較麻煩 比如需要把上面的IndicatorCalculateVO 通過命令行發(fā)給應用,么有專門的工具,需要自己挨個的使用 使用工具之后
CliUtils.getCommandLine(vo, IndicatorCalculateVO.class);
具體的實現(xiàn)
/**
* 獲取命令行
*
* @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);
}
這樣,參數(shù)和vo的相互轉化使用統(tǒng)一的工具進行轉化,減少出錯,只是關系功能就可以了,不需要挨個的去對每一個參數(shù)的情況,減少工作量
原文鏈接:https://blog.csdn.net/poem_2010/article/details/120520805
相關推薦
- 2022-04-18 python接口測試返回數(shù)據(jù)為字典取值方式_python
- 2023-11-17 在python中按不同的條件在列表list、字典dict和集合set中篩選想要的數(shù)據(jù)(以實際案例進行
- 2022-10-23 Android?AndFix熱修復原理詳情_Android
- 2022-05-03 windows?server?2019開啟iis服務器+tp5.1的完美配置運行流程_win服務器
- 2024-01-11 String數(shù)組轉List的三種方式
- 2022-07-11 Cadence中denalirc的用法總結
- 2022-06-13 go語言編程之select信道處理示例詳解_Golang
- 2021-12-24 Linux系統(tǒng)下netstat命令詳細介紹_Linux
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支