加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

命令行通过入参调用jar包

发布时间:2020-12-30 17:53:59 所属栏目:百科 来源:网络整理
导读:副标题#e# ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 命令行通过入参调用jar包 ? 最近因为项目需要,需要实现一个功能,即定时执行服务器上的一个脚本去对数据库的数据进行业务处理,要操作的数据库有很多种,
副标题[/!--empirenews.page--]

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 命令行通过入参调用jar包

? 最近因为项目需要,需要实现一个功能,即定时执行服务器上的一个脚本去对数据库的数据进行业务处理,要操作的数据库有很多种,mysql、db2、oracle、sqlserver等等,但是shell目前我还不熟悉,所以就先用java去实现,打成一个jar包,通过入参即可调用不同的数据库,满足了要求。网上搜了一下,大家多使用了Apache Commons-CLI包进行命令行参数解析,但是说的都不太清楚,我在这里结合自己的实际操作进行总结,希望能够帮助到有需要的朋友。

? 我这里因为项目有引到的包只有几个,所以没有选择通过maven管理项目,只是构建了一个java project,引入了我需要的jar包,比如我希望对mysql进行操作,那肯定需要mysql驱动包对吧。


?

一、项目目录

命令行通过入参调用jar包

?

?

?Entrance.java即为程序的主类,DtOptions.java是对命令行参数的设置,DT.java是一个常量类,指明了数据库类型,dealArgs.java是对入参进行处理,Database.java连接数据库用的实体类,CreateConnection.java用来处理相关数据库连接操作。


?

二、项目开发

1、相关jar包引入

上图可以看到,引入了Apache Commons-CLI包和mysql驱动包,这里我以操作mysql为例,大家根据需要自行引入即可。

2、设置命令行参数

大家有兴趣可以阅读官方指导https://commons.apache.org/proper/commons-cli/usage.html,我这里不细说了。

 1 public class DtOptions {
 2 
 3     public static Options generateOp() {
 4         final Options options = new Options();
 5         options.addOption(new Option("ant","ant",false,"command help"));
 6         options.addOption(new Option("t","type",true,"database type"));
 7         options.addOption(new Option("l","url","database url"));
 8         options.addOption(new Option("u","username","database username"));
 9         options.addOption(new Option("p","password","database password"));
10         return options;
11     }
12 }

?

1 //构建Options对象
2 Options options = new Options();
3 //设置一个命令项有4个参数,第一个是命令简称,第二个是命令全称
4 //第三个参数指定命令项是否为必填项,第四个是此命令的说明
5 options.addOption(new Option("ant","command help"));

3、解析入参

 1 public class Entrance {
 2 
 3     public static void main(String[] args) throws ClassNotFoundException,ParseException {
 4         // create the parser
 5         CommandLineParser parser = new DefaultParser();
 6         Options options = DtOptions.generateOp();
 7         CommandLine line = parser.parse(options,args);
 8         try {
 9             if (line.hasOption("ant")) {
10                 HelpFormatter formatter = new HelpFormatter();
11                 formatter.printHelp("ant",options);
12             } else {
13                 Database database = dealArgs.getDatabase(parser,options,args);
14                 Connection conn = CreateConnection.create(database);
15                 conn.close();
16             }
17         } catch (ParseException e) {
18             e.printStackTrace();
19         } catch (SQLException e) {
20             e.printStackTrace();
21         }
22 
23     }
24 }

?

 1 public class dealArgs {
 2 
 3     public static Database getDatabase(CommandLineParser parser,Options options,String[] args) throws ParseException {
 4 
 5         Database database = new Database();
 6         CommandLine line = parser.parse(options,args);
 7 
 8         if (line.hasOption("t")) {//数据库类型
 9             database.setType(line.getOptionValue("t"));
10         }
11         if (line.hasOption("l")) {//url
12             database.setUrl(line.getOptionValue("l"));
13         }
14         if (line.hasOption("u")) {//用户名
15             database.setUsername(line.getOptionValue("u"));
16         }
17         if (line.hasOption("p")) {//密码
18             database.setPassword(line.getOptionValue("p"));
19         }
20         return database;
21 
22     }
23 }

入参均在主类的args数组中被传入,我们需要做的就是将已经定义好的命令行参数规则引入,并通过CommandLineParser对象解析即可。

至此,把项目打成jar包后,就已经可以通过入参来调用它了,命令如下:

1 java -jar stat.jar -t 0 -l jdbc:mysql://localhost:3306 -u root -p root

如果使用者不知道需要哪些入参或是无法调用的话,可使用如下命令查看入参要求:

1 java -jar stat.jar -ant

什么?你问我为什么?仔细观察主类,有这么一段代码:

1 HelpFormatter formatter = new HelpFormatter();
2 //设置命令行入参时,我定义了一个叫做ant的入参
3 //此入参即用来展示程序入参信息
4 formatter.printHelp("ant",options);

其他的代码就是根据入参中的数据库类型建立数据库连接,代码我这里就不贴出来了,大家可以去github上查看。

三、项目打包

可参考下面这篇博文,讲的很好

https://blog.csdn.net/rogerxue12345/article/details/84344753

四、其他

项目已上传至github,欢迎与我交流:

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读