欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot啟動參數(shù)的實現(xiàn)

 更新時間:2025年01月26日 11:32:16   作者:Java布道者  
SpringBoot通過jar文件方式啟動,配置可以通過啟動參數(shù)進(jìn)行覆蓋,本文就來介紹一下SpringBoot啟動參數(shù)的實現(xiàn),感興趣的可以了解一下

在Java Web的開發(fā)完成后,以前我們都會打包成war文件,然后放大web容器,比如tomcat、jetty這樣的容器。現(xiàn)在基于SpringBoot開發(fā)的項目,我們直接打包成jar文件,基于內(nèi)嵌的tomcat來實現(xiàn)一樣的效果。

而啟動的方式變成了這樣:

java [ options ] -jar *.jar [ arguments ]

常見配置

我們常見的配置有:

  • --server.port:指定應(yīng)用程序的端口號。

  • --spring.profiles.active:設(shè)置應(yīng)用程序使用的配置文件中的環(huán)境配置。

  • --spring.config.additional-location:指定額外的配置文件路徑。

  • --Xms:設(shè)置JVM初始堆大小。

  • --Xmx:設(shè)置JVM最大堆大小。

  • --XX:PermSize:設(shè)置JVM永久代大小。

  • --XX:MaxPermSize:設(shè)置JVM最大永久代大小。

  • --Xdebug:開啟遠(yuǎn)程JDWP調(diào)試。

  • -D:定義屬性。

options

在啟動參數(shù)中,我們可以通過添加這樣的配置,來覆蓋系統(tǒng)屬性中的值:

java -Dfile.encoding=UTF-8 -jar app.jar 

在代碼中可以通過這樣獲取該值:

String fileEncoding = System.getProperties("file.encoding"); //UTF-8

在很多項目中,都會基于*System.getProperties()*來控制代碼流程,這里要注意,通過啟動參數(shù)配置的值優(yōu)先級會大于系統(tǒng)中的配置。同時注意改配置出現(xiàn)的位置,在上面使用了options位置來進(jìn)行區(qū)分。

arguments

在SpringBoot項目中,我們一般把配置都會寫在application.yml文件中,隨著項目一并打包到j(luò)ar文件中,在生產(chǎn)環(huán)境中, 啟動項目時通過添加*--spring.config.location=/application.yml*來修改項目的配置文件指向,從而實現(xiàn)覆蓋application的效果。

同樣,我們可以通過配置啟動參數(shù)來覆蓋application中的某個配置項,比如:

java -Dfile.encoding=UTF-8 -jar app.jar --server.port=8080 

可以在main方法的參數(shù)中獲取該值

log.info(">>>>> args: {}", Arrays.toString(args) );

參數(shù)的位置在上面對應(yīng)arguments位置。

優(yōu)先級

系統(tǒng)參數(shù)或環(huán)境變量:

  • 啟動配置

  • set prop=value (export prop=value)

  • 系統(tǒng)中配置的參數(shù)或環(huán)境變量

Spring中的配置:

  • 啟動參數(shù)

  • --spring.config.location=application.yml

  • classpath:application.yml

EnvironmentAware

在Spring中,提供了一個Aware接口EnvironmentAware,通過該接口我們可以很方便地獲取上面說的那些參數(shù),不用關(guān)心是系統(tǒng)屬性、環(huán)境變量還是main方法的args。

public class MyService implements ApplicationContextAware, EnvironmentAware {
    
    @Override
    public void setEnvironment(Environment environment) {
        // 可以讀取System properties|env 數(shù)據(jù);系統(tǒng)參數(shù)
        log.info(">>>>> 從系統(tǒng)屬性中取值: {}", environment.getProperty("file.encoding") );
    }
}

通過觀察SpringBoot啟動流程中,其中在SpringApplication的run方法中,可以看到系統(tǒng)環(huán)境屬性加載過程

ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);

基于StandardEnvironment的擴(kuò)展。

public class StandardEnvironment extends AbstractEnvironment {
    
 public static final String SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME = "systemEnvironment";
    
 public static final String SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME = "systemProperties";
    
 @Override
 protected void customizePropertySources(MutablePropertySources propertySources) {
  propertySources.addLast(
    new PropertiesPropertySource(SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, getSystemProperties()));
  propertySources.addLast(
    new SystemEnvironmentPropertySource(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, getSystemEnvironment()));
 }

}

我們看到的這樣的寫法其實就是基于SpEL對PropertySources的資源的解析:

    @Value("#{systemProperties['file.encoding']}")
    private String fileEncoding;

    @Value("#{systemEnvironment['JAVA_HOME']}")
    private String javaHome;

讀取配置順序

  • 默認(rèn)配置:Spring Boot 默認(rèn)提供了一些基本的配置,如應(yīng)用程序的端口號、上下文路徑等。這些配置位于 SpringBoot jar 包中的默認(rèn)配置文件中。

  • 用戶自定義配置:如果應(yīng)用程序中有自定義的配置文件,Spring Boot 會首先加載這些文件。用戶可以通過在應(yīng)用程序的 classpath 下放置一個名為 application.properties 或 application.yml 的文件來提供自定義配置。

  • 命令行參數(shù):在啟動應(yīng)用程序時,可以通過命令行參數(shù)來傳遞配置。這些參數(shù)會被加載并覆蓋默認(rèn)配置和用戶自定義配置。

  • 環(huán)境變量:環(huán)境變量也可以提供配置信息。如果應(yīng)用程序中定義了環(huán)境變量,它們將被加載并覆蓋默認(rèn)配置、用戶自定義配置和命令行參數(shù)。

  • 系統(tǒng)屬性:系統(tǒng)屬性也可以提供配置信息。如果應(yīng)用程序中定義了系統(tǒng)屬性,它們將被加載并覆蓋默認(rèn)配置、用戶自定義配置、命令行參數(shù)和環(huán)境變量。

Springboot會先加載PropertiesPropertySourceLoader,后加載YamlPropertySourceLoader,所以先讀取的是properties文件。

結(jié)束語

了解SpringBoot配置加載相關(guān)知識,可以有效解決配置項不生效問題以及需要快速修改配置項的情況。

需要注意的是,在加載多個配置文件時,如果有沖突的配置項,后加載的配置文件中的配置項將覆蓋先加載的配置文件中的相同配置項。因此,在應(yīng)用程序中,應(yīng)該避免使用相同的配置項名來定義不同的配置值。

到此這篇關(guān)于SpringBoot啟動參數(shù)的實現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot啟動參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java WSDL接口webService實現(xiàn)方式

    java WSDL接口webService實現(xiàn)方式

    這篇文章主要為大家詳細(xì)介紹了java WSDL接口webService實現(xiàn)方式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • SpringBoot中使用Guava實現(xiàn)單機(jī)令牌桶限流的示例

    SpringBoot中使用Guava實現(xiàn)單機(jī)令牌桶限流的示例

    本文主要介紹了SpringBoot中使用Guava實現(xiàn)單機(jī)令牌桶限流的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java常用的數(shù)據(jù)脫敏方法(手機(jī)、郵箱、身份證號)

    Java常用的數(shù)據(jù)脫敏方法(手機(jī)、郵箱、身份證號)

    這篇文章主要給大家介紹了關(guān)于Java常用的數(shù)據(jù)脫敏(手機(jī)、郵箱、身份證號)的相關(guān)資料,信息脫敏對某些敏感信息通過脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù),需要的朋友可以參考下
    2023-07-07
  • 詳解spring boot starter redis配置文件

    詳解spring boot starter redis配置文件

    spring-boot-starter-Redis主要是通過配置RedisConnectionFactory中的相關(guān)參數(shù)去實現(xiàn)連接redis service。下面通過本文給大家介紹在spring boot的配置文件中redis的基本配置,需要的的朋友參考下
    2017-07-07
  • Java開發(fā)中為什么要使用單例模式詳解

    Java開發(fā)中為什么要使用單例模式詳解

    單例對于大家來說并不陌生,但是在什么時候用單例呢?為什么要用呢?本文就帶大家了解一下為什么要使用單例,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • maven 隱式依賴引起的包沖突解決辦法

    maven 隱式依賴引起的包沖突解決辦法

    這篇文章主要介紹了maven 隱式依賴引起的包沖突解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • java JDBC系列教程之JDBC類的簡析與JDBC的基礎(chǔ)操作

    java JDBC系列教程之JDBC類的簡析與JDBC的基礎(chǔ)操作

    這篇文章主要介紹了java JDBC系列教程之JDBC類的簡析與JDBC的基礎(chǔ)操作,本文分步驟通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Java實現(xiàn)簡單汽車租賃系統(tǒng)

    Java實現(xiàn)簡單汽車租賃系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡單汽車租賃系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 詳解JAVA后端實現(xiàn)統(tǒng)一掃碼支付:微信篇

    詳解JAVA后端實現(xiàn)統(tǒng)一掃碼支付:微信篇

    本篇文章主要介紹了詳解JAVA后端實現(xiàn)統(tǒng)一掃碼支付:微信篇,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。
    2017-01-01
  • Spring Boot與Spark、Cassandra系統(tǒng)集成開發(fā)示例

    Spring Boot與Spark、Cassandra系統(tǒng)集成開發(fā)示例

    本文演示以Spark作為分析引擎,Cassandra作為數(shù)據(jù)存儲,而使用Spring Boot來開發(fā)驅(qū)動程序的示例。對spring boot 與spark cassandra集成開發(fā)示例代碼感興趣的朋友跟著腳本之家小編一起學(xué)習(xí)吧
    2018-02-02

最新評論