国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[Java SE] 徹底搞懂Java程序的三大參數(shù)配置途徑:系統(tǒng)變量與JVM參數(shù)(VM Option)/環(huán)境變量/啟動程序參數(shù)args

這篇具有很好參考價值的文章主要介紹了[Java SE] 徹底搞懂Java程序的三大參數(shù)配置途徑:系統(tǒng)變量與JVM參數(shù)(VM Option)/環(huán)境變量/啟動程序參數(shù)args。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

0 序言

一次沒搞懂,處處受影響。這個問題屬于基礎(chǔ)問題,但又經(jīng)常踩坑,不得不重視一下了。

1 Java程序動態(tài)參數(shù)的配置途徑:系統(tǒng)變量與JVM參數(shù)(VM Option) vs 環(huán)境變量 vs 啟動程序參數(shù)args

[Java SE] 徹底搞懂Java程序的三大參數(shù)配置途徑:系統(tǒng)變量與JVM參數(shù)(VM Option)/環(huán)境變量/啟動程序參數(shù)args

IDEA中的配置位置文章來源地址http://www.zghlxwxcb.cn/news/detail-476910.html

參數(shù) 使用方式 示例 代碼獲取方式
系統(tǒng)屬性 由操作系統(tǒng)、JVM、應(yīng)用程序主動設(shè)置 System.setProperties(Properties propes) / System.setProperties(String key,String value) / System.getProperties().load(String filename) / ... String value = System.getProperty(propertyName);
VM Options(JVM參數(shù)) 優(yōu)先級高于系統(tǒng)變量。必須以-D 、 -X-XX 開頭,每個參數(shù)用空格隔開 -Dvm.key=VmKey -Dvm.key2=VmKey2 String key = System.getProperty(vm.key);
Program Arguments(程序啟動參數(shù)) 每個參數(shù)用空格隔開 p.key=Program_Key p.name=ProgramName p.age=18 main(String[] args)
Environment Variable(環(huán)境變量) 我的電腦-屬性-高級環(huán)境設(shè)置-環(huán)境變量內(nèi)配置系統(tǒng)屬性。其優(yōu)先級低于 VM options ,即如果VM options 有一個變量和 Environment variable中的變量的key相同,則以VM options 中為準(zhǔn), 以分號分割多個 env.key=env_james;server.servlet.context-path=/test;server.port=8080 String envKey = System.getenv(“env.key”);

2 工具類:SystemVariableTool

import cn.xx.bd.xx.common.debug.Print;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.DefaultApplicationArguments;
import org.springframework.util.ObjectUtils;

import java.util.*;

/**
 * @author johnny-zen
 * @version v1.0
 * @create-time 2023/6/9 9:57
 * @description 系統(tǒng)屬性讀取工具
 *  [VM options]
 *      VM options其實(shí)就是我們在程序中需要的運(yùn)行時環(huán)境變量,它需要以-D或-X或-XX開頭,每個參數(shù)使用空格分隔
 *      使用最多的就是-Dkey=value設(shè)定系統(tǒng)屬性值,比如-Dspring.profiles.active=dev3
 *  [Program arguments]
 *      Program arguments為我們傳入main方法的字符串?dāng)?shù)組args[],它通常以--開頭,如--spring.profiles.active=dev3
 *      等價于-Dspring.profiles.active=dev3如果同時存在,以Program arguments配置優(yōu)先
 * @refrence-doc
 * @gpt-promt
 */
public class SystemVariableTool {
    private final static Logger logger = LoggerFactory.getLogger(SystemVariableTool.class);

    public static final String SYSTEM_PROPERTY_PARAM = "SYSTEM_PROPERTY";

    public static final String ENVIRONMENT_VARIABLE_PARAM = "ENVIRONMENT_VARIABLE";

    /** args **/
    public static final String ARGS_PARAM = "ARGS_PARAM";
    // 可選參數(shù)
    public static final String OPTION_ARG_PARAM = "OPTION_ARG_VARIABLE";
    // 非可選參數(shù)
    public static final String NON_OPTION_ARG_PARAM = "NON_OPTION_ARG_PARAM";

    private ApplicationArguments applicationArguments;

    public SystemVariableTool(ApplicationArguments applicationArguments){
        this.applicationArguments = applicationArguments;
    }

    /**
     * 讀取系統(tǒng)屬性
     * @param propertyName
     * @config-method 配置方法
     *  1 ) IDEA - (Select one Program) - Edit Configurations - VM Options - ( "-Dserver.port=8088" / "-Xmx239m" )
     * @sample
     * server.port
     * -----------------------------
     * java.version Java 運(yùn)行時環(huán)境版本
     * java.vendor Java 運(yùn)行時環(huán)境供應(yīng)商
     * java.vendor.url Java 供應(yīng)商的 URL
     * java.home Java 安裝目錄
     * java.vm.specification.version Java 虛擬機(jī)規(guī)范版本
     * java.vm.specification.vendor Java 虛擬機(jī)規(guī)范供應(yīng)商
     * java.vm.specification.name Java 虛擬機(jī)規(guī)范名稱
     * java.vm.version Java 虛擬機(jī)實(shí)現(xiàn)版本
     * java.vm.vendor Java 虛擬機(jī)實(shí)現(xiàn)供應(yīng)商
     * java.vm.name Java 虛擬機(jī)實(shí)現(xiàn)名稱
     * java.specification.version Java 運(yùn)行時環(huán)境規(guī)范版本
     * java.specification.vendor Java 運(yùn)行時環(huán)境規(guī)范供應(yīng)商
     * java.specification.name Java 運(yùn)行時環(huán)境規(guī)范名稱
     * java.class.version Java 類格式版本號
     * java.class.path Java 類路徑
     * java.library.path 加載庫時搜索的路徑列表
     * java.io.tmpdir 默認(rèn)的臨時文件路徑
     * java.compiler 要使用的 JIT 編譯器的名稱
     * java.ext.dirs 一個或多個擴(kuò)展目錄的路徑
     * os.name 操作系統(tǒng)的名稱
     * os.arch 操作系統(tǒng)的架構(gòu) 例如: "amd64"
     * os.version 操作系統(tǒng)的版本 例如: "10.0"
     * file.separator 文件分隔符(在 UNIX 系統(tǒng)中是"/")
     * path.separator 路徑分隔符(在 UNIX 系統(tǒng)中是":")
     * line.separator 行分隔符(在 UNIX 系統(tǒng)中是"/n")
     * user.country 用戶所在國家
     * user.name 用戶的賬戶名稱
     * user.home 用戶的主目錄 例如: "C:\Users\Johnny"
     * user.dir 用戶的當(dāng)前工作目錄 例如: "E:\source_code\BigData\bdp_common_data_service"
     * user.language 用戶當(dāng)前的語言 例如: "zh"
     * user.timezone 用戶所在時區(qū) 例如: "Asia/Shanghai"
     * @return
     */
    public static String getSystemProperty(String propertyName){
        Map enviromentProperties = System.getProperties();
        return (String) enviromentProperties.get(propertyName);
    }

    /**
     * 讀取環(huán)境變量
     * @config-method 配置方式 :
     *  優(yōu)先級 : 方式1 < 方式2
     *  1) My Computer - 屬性 - 高級系統(tǒng)設(shè)置 - 環(huán)境變量 - ...
     *  2) IDEA - (Select one Program) - Edit Configurations - Environment Variables - ( ENV_VAR="env-var-demo" server.port=8090 ...)
     *
     * @sample
     * USERPROFILE        :用戶目錄
     * USERDNSDOMAIN      :用戶域
     * PATHEXT            :可執(zhí)行后綴
     * JAVA_HOME          :Java安裝目錄
     * TEMP               :用戶臨時文件目錄
     * SystemDrive        :系統(tǒng)盤符
     * ProgramFiles       :默認(rèn)程序目錄
     * USERDOMAIN         :帳戶的域的名稱
     * ALLUSERSPROFILE    :用戶公共目錄
     * SESSIONNAME        :Session名稱
     * TMP                :臨時目錄
     * Path               :path環(huán)境變量
     * CLASSPATH          :classpath環(huán)境變量
     * PROCESSOR_ARCHITECTURE :處理器體系結(jié)構(gòu)
     * OS                     :操作系統(tǒng)類型
     * PROCESSOR_LEVEL    :處理級別
     * COMPUTERNAME       :計(jì)算機(jī)名
     * Windir             :系統(tǒng)安裝目錄
     * SystemRoot         :系統(tǒng)啟動目錄
     * USERNAME           :用戶名
     * ComSpec            :命令行解釋器可執(zhí)行程序的準(zhǔn)確路徑
     * APPDATA            :應(yīng)用程序數(shù)據(jù)目錄
     * @return
     */
    public static String getEnvironmentVariable(String variableName){
        Map enviromentProperties = System.getenv();
        return (String) enviromentProperties.get(variableName);
    }

    public Map<String, Object> getVariables(String variableName){
        Map<String, Object> resultMap = new HashMap<>();
        String systemProperty = getSystemProperty(variableName);
        resultMap.put(SYSTEM_PROPERTY_PARAM, systemProperty);

        String environmentVariable = getEnvironmentVariable(variableName);
        resultMap.put(ENVIRONMENT_VARIABLE_PARAM, environmentVariable);

        //解析 args
        String argsValue = null;
        String[] args = applicationArguments.getSourceArgs();
        if(!ObjectUtils.isEmpty(args)){
            for(int i = 0; i < args.length; i++){
                if(args[i].toLowerCase().contains(variableName.toLowerCase())){
                    argsValue = args[i];
                }
            }
        }
        resultMap.put(ARGS_PARAM, argsValue);
        /**
         * 解析選項(xiàng)參數(shù)
         * @description
         *  1. 不同框架 對 args 的解析策略均不同。例如 Flink 的 ParameterTool 與 SpringBoot 的 DefaultApplicationArguments,解析規(guī)則和解析結(jié)果有很大差異
         *  1. 基于 SpringBoot 的 ApplicationArguments 接口, DefaultApplicationArguments 。 如果是以”--“為前綴,則判定為選項(xiàng)參數(shù);反之,被判定為 非選項(xiàng)參數(shù)
         * @sample
         * [1] 選項(xiàng)參數(shù)的有效示例
         *  --foo
         *  --foo=
         *  --foo=""
         *  --foo=bar
         *  --foo="bar then baz"
         *  --foo=bar,baz,biz
         * [2] 選項(xiàng)參數(shù)的無效示例
         *  -foo
         *  --foo bar
         *  --foo = bar
         *  --foo=bar --foo=baz --foo=biz
         */
        List<String> optionArgs = applicationArguments.getOptionValues(variableName);// args = { "--foo="bar then baz" } , variableName = "foo" => optionArgs = {"bar then baz"}
        resultMap.put(OPTION_ARG_PARAM, optionArgs);

        List<String> allNonOptionArgs = applicationArguments.getNonOptionArgs();// { "server.port=8089" , "server.port=8090", "boo=bar,then,baz" , "foo=bar then baz" }
        List<String> nonOptionArgs = new ArrayList<>();
        for(int i=0;i<allNonOptionArgs.size();i++){
            if(allNonOptionArgs.get(i).toLowerCase().contains(variableName.toLowerCase())){
                nonOptionArgs.add( allNonOptionArgs.get(i) );
            }
        }
        resultMap.put(NON_OPTION_ARG_PARAM, nonOptionArgs);
        return resultMap;
    }

    public static void main(String[] args) {
        ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);
        SystemVariableTool systemPropertiesUtil = new SystemVariableTool(applicationArguments);
        Map<String, Object> map = systemPropertiesUtil.getVariables("server.port");
        Print.print(map);
    }
}

X 參考文獻(xiàn)

  • Java中System.getProperty()的作用及使用 - CSDN
  • Idea中的VM Options、Program Arguments、Environment Variable全解析 - CSDN
  • java 獲取系統(tǒng)變量(環(huán)境變量和設(shè)置變量) - CSDN
  • idea為java程序添加啟動參數(shù)(program arguments,vm arguments,Environment variable),并在程序中獲取使用 - CSDN
  • 【Flink】關(guān)于ParameterTool - CSDN
  • 如何使用 Flink ParameterTool 讀取配置 - CSDN

到了這里,關(guān)于[Java SE] 徹底搞懂Java程序的三大參數(shù)配置途徑:系統(tǒng)變量與JVM參數(shù)(VM Option)/環(huán)境變量/啟動程序參數(shù)args的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Day1】零基礎(chǔ)學(xué)java--》記事本運(yùn)行java程序,通熟語言讓你徹底明白為什么配置java環(huán)境變量

    【Day1】零基礎(chǔ)學(xué)java--》記事本運(yùn)行java程序,通熟語言讓你徹底明白為什么配置java環(huán)境變量

    前言: 大家好,我是 良辰丫 ,從今天開始我將協(xié)同大家一起從零基礎(chǔ)學(xué)習(xí)Java,期待與君為伴,走向海的彼岸。?????? ??個人主頁:良辰針不戳 ??所屬專欄:EveryDay零基礎(chǔ)學(xué)java ??勵志語句:生活也許會讓我們遍體鱗傷,但最終這些傷口會成為我們一輩子的財(cái)富。 ??期

    2024年02月11日
    瀏覽(13)
  • 【Java SE語法篇】4.程序邏輯控制

    【Java SE語法篇】4.程序邏輯控制

    ??博客主頁:愛敲代碼的小楊. ?專欄:《Java SE語法》 ??感謝大家點(diǎn)贊????收藏?評論???,您的三連就是我持續(xù)更新的動力?? 順序結(jié)構(gòu) 比較簡單,按照代碼書寫的順序一行一行執(zhí)行。 如果調(diào)整代碼的書寫順序, 則執(zhí)行順序也發(fā)生變化。 它的作用是根據(jù)判斷的條件

    2024年02月01日
    瀏覽(23)
  • 一文徹底搞懂JSON數(shù)據(jù)

    一文徹底搞懂JSON數(shù)據(jù)

    什么是JSON,為什么需要JSON,JSON的3種形式,JSON常用的方法等 TIP JSON指的是全稱是:javascript對象表示法 JSON是Ajax發(fā)送和接收數(shù)據(jù)的一種格式 JSON是一種輕量級的數(shù)據(jù)交互格式, 其為字符串類型 (面試題會考到) JSON是一種語法,用來序列化對象、數(shù)組、數(shù)值、字符串、布爾值和

    2024年02月06日
    瀏覽(29)
  • 【多圖警告】徹底搞懂浮點(diǎn)數(shù)

    【多圖警告】徹底搞懂浮點(diǎn)數(shù)

    float類型,在很多地方?jīng)]有看明白,多文字也看得人心煩。 最近不是很愿意看多文字的博客和技術(shù)文章了,但確實(shí)不是什么好事。 要改。 本文用大量圖片講解了浮點(diǎn)數(shù)在計(jì)算機(jī)中的存儲方式以及浮點(diǎn)數(shù)的最值、精度等問題,文末有測試用的C++程序。 我們先不讓小數(shù)點(diǎn)“浮動

    2024年02月15日
    瀏覽(24)
  • 【算法】一文徹底搞懂ZAB算法

    【算法】一文徹底搞懂ZAB算法

    最近需要設(shè)計(jì)一個分布式系統(tǒng),需要一個中間件來存儲共享的信息,來保證多個系統(tǒng)之間的數(shù)據(jù)一致性,調(diào)研了兩個主流框架Zookeeper和ETCD,發(fā)現(xiàn)都能滿足我們的系統(tǒng)需求。 其中ETCD是K8s中采用的分布式存儲,而其底層采用了RAFT算法來保證一致性,之前已經(jīng)詳細(xì)分析了Raft算法

    2024年02月02日
    瀏覽(24)
  • 20,000+ 字,徹底搞懂 Kafka!

    20,000+ 字,徹底搞懂 Kafka!

    1、解耦合 2、異步處理 例如電商平臺,秒殺活動。 一般流程會分為: 風(fēng)險控制 庫存鎖定 生成訂單 短信通知 更新數(shù)據(jù) 通過消息系統(tǒng)將秒殺活動業(yè)務(wù)拆分開,將不急需處理的業(yè)務(wù)放在后面慢慢處理; 流程改為: 風(fēng)險控制 庫存鎖定 消息系統(tǒng) 生成訂單 短信通知 更新數(shù)據(jù) 3、

    2024年02月11日
    瀏覽(24)
  • 2分鐘徹底搞懂“高內(nèi)聚,低耦合”

    2分鐘徹底搞懂“高內(nèi)聚,低耦合”

    ??推薦閱讀文章?? ?? JavaSE系列 ????1??《JavaSE系列教程》 ?? MySQL系列 ????2??《MySQL系列教程》 ?? JavaWeb系列 ????3??《JavaWeb系列教程》 ?? SSM框架系列 ????4??《SSM框架系列教程》 ??本博客知識點(diǎn)收錄于??????《SSM框架系列教程》??—??01【高內(nèi)聚

    2024年03月23日
    瀏覽(26)
  • 一文徹底搞懂ssh的端口轉(zhuǎn)發(fā)

    一文徹底搞懂ssh的端口轉(zhuǎn)發(fā)

    端口轉(zhuǎn)發(fā)是突破網(wǎng)絡(luò)域隔離的一個手段。在學(xué)習(xí)這個知識的時候需要不斷自問 為什么需要端口轉(zhuǎn)發(fā)? 應(yīng)用場景是什么呢? SSH 隧道或 SSH 端口轉(zhuǎn)發(fā)可以用來在 客戶端和服務(wù)器之間建立一個加密的 SSH 連接 如下圖,通過它來把本地流量轉(zhuǎn)發(fā)到服務(wù)器端,或者把服務(wù)器端流量轉(zhuǎn)發(fā)

    2023年04月22日
    瀏覽(22)
  • 徹底搞懂 PHP 運(yùn)算符 ?: 和 ??

    ?: 稱之為短三元運(yùn)算符,它是我們熟悉的三元運(yùn)算符(也叫做條件運(yùn)算符)的一種特殊寫法,也就是省略了三元運(yùn)算符中間的部分。 復(fù)習(xí)一下三元表達(dá)式的語法: (expr1) ? (expr2) : (expr3) 在 expr1 求值為 true 時的值為 expr2,在 expr1 求值為 false 時的值為 expr3。 省略三元運(yùn)算符中間

    2024年02月11日
    瀏覽(15)
  • 3分鐘帶你徹底搞懂 Kafka

    3分鐘帶你徹底搞懂 Kafka

    實(shí)時數(shù)據(jù)處理 ,從名字上看,很好理解,就是將數(shù)據(jù)進(jìn)行實(shí)時處理,在現(xiàn)在流行的微服務(wù)開發(fā)中,最常用實(shí)時數(shù)據(jù)處理平臺有 RabbitMQ、RocketMQ 等消息中間件。 這些中間件,最大的特點(diǎn)主要有兩個: 服務(wù)解耦 流量削峰 在早期的 web 應(yīng)用程序開發(fā)中,當(dāng)請求量突然上來了時候,

    2024年04月16日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包