Java程序命令行參數(shù)用法總結(jié)
前言: 在命令行中輸入可以輸入各類參數(shù),本文將針對(duì)這些參數(shù)做一個(gè)小結(jié)。
基于命令行輸入?yún)?shù)
測(cè)試程序如下:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println("System Property, abc:" + System.getenv("feature.flag") + "," + System.getProperty("feature"));
System.out.println("args:" + Arrays.toString(args));
}
}
基于命令行的輸入:
java -Dfeature=module1 -Xms128M -Xmx256M org.spb.data.Main first second third
輸出為:
System Property, abc:null,module1
args:[first, second, third]
從上述示例中可知 -Dfeature=module1,設(shè)置了系統(tǒng)屬性信息,被正確地解析出來。系統(tǒng)屬性的設(shè)置位于Java程序之前。
first second third作為Java程序的args參數(shù),需要放在程序之后才可以正確被解析。
-Xms128 -Xmx256M: 為設(shè)置JVM的參數(shù),這里設(shè)置了其對(duì)內(nèi)存的大小。
如果是Spring Boot應(yīng)用的話,則可以在命令行設(shè)置:
– server.port=9091
通過兩個(gè)‘- - '作為命令行參數(shù)的前綴。
基于Run Configuration界面設(shè)置Java程序的入口參數(shù):

設(shè)置環(huán)境變量:

程序運(yùn)行的結(jié)果信息:

從運(yùn)行結(jié)果中可知: 環(huán)境變量被正確設(shè)置讀取,但是系統(tǒng)屬性卻未正確設(shè)置。
基于命令行輸入系統(tǒng)屬性
java -Dfeature=module1 org.spb.data.Main
-D 表示其為系統(tǒng)屬性
JVM參數(shù)設(shè)置
java -Xms128M -Xmx256M org.spb.data.Main
JVM參數(shù)是設(shè)置JVM的設(shè)置,其遵守JVM設(shè)置的參數(shù)類型。
環(huán)境變量 vs 系統(tǒng)屬性
當(dāng)程序中需要使用與操作系統(tǒng)相關(guān)的變量(例如:文件分隔符、換行符)時(shí),Java提供了System類的靜態(tài)方法getenv()和getProperty()用于返回系統(tǒng)相關(guān)的變量與屬性,getenv方法返回的變量大多于系統(tǒng)相關(guān),getProperty方法返回的變量大多與java程序有關(guān)。
系統(tǒng)屬性和環(huán)境變量都是名稱與值之間的映射。兩種機(jī)制都能用來將用戶定義的信息傳遞給 Java進(jìn)程。環(huán)境變量產(chǎn)生更多的全局效應(yīng),因?yàn)樗鼈儾粌H對(duì)Java子進(jìn)程可見,而且對(duì)于定義它們的進(jìn)程的所有子進(jìn)程都是可見的。在不同的操作系統(tǒng)上,它們的語(yǔ)義有細(xì)微的差別,比如,不區(qū)分大小寫。因此環(huán)境變量更可能有意料不到的副作用。程序中盡可能使用系統(tǒng)屬性。環(huán)境變量應(yīng)該在需要全局效應(yīng)的時(shí)候使用,或者在外部系統(tǒng)接口要求使用環(huán)境變量時(shí)使用(比如 PATH)
從上述示例可知,系統(tǒng)屬性由于其與程序緊密相關(guān),則可以基于命令行進(jìn)行設(shè)置。但是,環(huán)境變量則無法通過程序進(jìn)行設(shè)置,需要基于IDE和環(huán)境變量進(jìn)行設(shè)置。
Java命令行的幫助信息:

圖中標(biāo)示出來的就是系統(tǒng)屬性信息。
基于Maven命令運(yùn)行Spring Boot應(yīng)用
程序代碼如下:
@Slf4j
@SpringBootApplication
public class AppRunnerApplication {
public static void main(String[] args) throws InterruptedException {
SpringApplication.run(AppRunnerApplication.class, args);
//Thread.currentThread().join();
log.info("args:{}", Arrays.toString(args));
log.info("feature:" + System.getProperty("feature"));
log.info("feature.flag:" + System.getenv("feature.flag"));
}
}
mvn spring-boot:run -Dmaven.test.skip=true -Pdev -Dspring-boot.run.arguments=“first seond third” -Dspring-boot.run.jvmArguments="-Dfeature=module11"
-Dfeature=module11設(shè)置系統(tǒng)屬性信息
arguments: 設(shè)置Java 程序main的入口參數(shù)
對(duì)于環(huán)境變量,則需要設(shè)置pom.xml文件中的plugin配置項(xiàng):
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<feature>moduleXXX</feature>
</systemPropertyVariables>
<environmentVariables>
<feature.flag>true</feature.flag>
</environmentVariables>
</configuration>
</plugin>
</plugins>
</build>
運(yùn)行結(jié)果為:
2019-11-11 23:08:22.764 INFO 18717 --- [ restartedMain] o.s.d.apprunner.cmdline.AppLineRunner1 : App LineRunner1:first seond third
2019-11-11 23:08:22.765 INFO 18717 --- [ restartedMain] o.s.d.apprunner.cmdline.AppLineRunner2 : App LineRunner2:[first seond third]
2019-11-11 23:08:22.766 INFO 18717 --- [ restartedMain] o.s.data.apprunner.AppRunnerApplication : args:[first seond third]
2019-11-11 23:08:22.766 INFO 18717 --- [ restartedMain] o.s.data.apprunner.AppRunnerApplication : feature:module11
2019-11-11 23:08:22.766 INFO 18717 --- [ restartedMain] o.s.data.apprunner.AppRunnerApplication : feature.flag:true
如果在命令行不進(jìn)行jvmArguments的參數(shù)設(shè)置:
mvn spring-boot:run -Dmaven.test.skip=true -Pdev -Dspring-boot.run.arguments=“first seond third”
輸出結(jié)果信息如下:
2019-11-11 23:11:55.399 INFO 18757 --- [ restartedMain] o.s.d.apprunner.cmdline.AppLineRunner2 : App LineRunner2:[first seond third]
2019-11-11 23:11:55.400 INFO 18757 --- [ restartedMain] o.s.data.apprunner.AppRunnerApplication : args:[first seond third]
2019-11-11 23:11:55.400 INFO 18757 --- [ restartedMain] o.s.data.apprunner.AppRunnerApplication : feature:moduleXXX
2019-11-11 23:11:55.400 INFO 18757 --- [ restartedMain] o.s.data.apprunner.AppRunnerApplication : feature.flag:true
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Java中l(wèi)og4j.properties配置與加載應(yīng)用
這篇文章主要介紹了 log4j.properties配置與加載應(yīng)用的相關(guān)資料,需要的朋友可以參考下2018-02-02
Java實(shí)現(xiàn)在PPT中創(chuàng)建SmartArt圖形的示例代碼
SmartArt其實(shí)就是一個(gè)文字的可視化工具,用戶可在PowerPoint,Word,Excel中使用該特性創(chuàng)建各種圖形圖表。本文就將為您介紹如何通過Java應(yīng)用程序在PPT中創(chuàng)建SmartArt圖形,需要的可以參考一下2023-04-04
Java中的FileInputStream 和 FileOutputStream 介紹_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
FileInputStream 是文件輸入流,它繼承于InputStream。FileOutputStream 是文件輸出流,它繼承于OutputStream。接下來通過本文給大家介紹Java中的FileInputStream 和 FileOutputStream,需要的朋友可以參考下2017-05-05
Mybatis-plus一對(duì)多分頁(yè)數(shù)據(jù)條數(shù)不正確的處理
這篇文章主要介紹了Mybatis-plus一對(duì)多分頁(yè)數(shù)據(jù)條數(shù)不正確的處理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Spring boot搭建web應(yīng)用集成thymeleaf模板實(shí)現(xiàn)登陸
這篇文章主要介紹了Spring boot搭建web應(yīng)用集成thymeleaf模板實(shí)現(xiàn)登陸,頁(yè)面使用bootstrap,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
SpringBoot從Nacos讀取MySQL數(shù)據(jù)庫(kù)配置錯(cuò)誤:Public Key Retrieva
最近的項(xiàng)目,突然都從MySQL5.7升級(jí)到8.0了,有些項(xiàng)目能運(yùn)行成功,有些項(xiàng)目遇到了問題,啟動(dòng)不成功,顯示數(shù)據(jù)庫(kù)方面的異常信息,本文給大家介紹了SpringBoot從Nacos讀取MySQL數(shù)據(jù)庫(kù)配置錯(cuò)誤:Public Key Retrieval is not allowed的解決方案,需要的朋友可以參考下2024-04-04
如何利用Vue+SpringBoot實(shí)現(xiàn)評(píng)論功能
簡(jiǎn)單的評(píng)論功能是指能夠在文章底下進(jìn)行評(píng)論,而且能夠?qū)υu(píng)論進(jìn)行回復(fù),下面這篇文章主要給大家介紹了關(guān)于如何利用Vue+SpringBoot實(shí)現(xiàn)評(píng)論功能的相關(guān)資料,需要的朋友可以參考下2023-06-06
關(guān)于java入門與java開發(fā)環(huán)境配置詳細(xì)教程
這篇文章主要介紹了關(guān)于java入門與java開發(fā)環(huán)境配置詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Spring Security OAuth2集成短信驗(yàn)證碼登錄以及第三方登錄
這篇文章主要介紹了Spring Security OAuth2集成短信驗(yàn)證碼登錄以及第三方登錄,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04

