成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring BOOT 啟動參數

開發 架構
在加載多個配置文件時,如果有沖突的配置項,后加載的配置文件中的配置項將覆蓋先加載的配置文件中的相同配置項。因此,在應用程序中,應該避免使用相同的配置項名來定義不同的配置值。

Spring BOOT 啟動參數

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

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

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

常見配置

我們常見的配置有:

  1. --server.port:指定應用程序的端口號
  2. --spring.profiles.active:設置應用程序使用的配置文件中的環境配置。
  3. --spring.config.additional-location:指定額外的配置文件路徑。
  4. --Xms:設置JVM初始堆大小。
  5. --Xmx:設置JVM最大堆大小。
  6. --XX:PermSize:設置JVM永久代大小。
  7. --XX:MaxPermSize:設置JVM最大永久代大小。
  8. --Xdebug:開啟遠程JDWP調試。
  9. -D:定義屬性

options

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

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

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

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

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

arguments

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

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

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

可以在main方法的參數中獲取該值

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

參數的位置在上面對應arguments位置。

優先級

系統參數或環境變量:

  • 啟動配置
  • set prop=value (export prop=value)
  • 系統中配置的參數或環境變量

Spring中的配置:

  • 啟動參數
  • --spring.config.location=application.yml
  • classpath:application.yml

EnvironmentAware

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

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

通過觀察SpringBoot啟動流程中,其中在SpringApplication的run方法中,可以看到系統環境屬性加載過程

ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);

基于StandardEnvironment的擴展。

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;

讀取配置順序

  1. 默認配置:Spring Boot 默認提供了一些基本的配置,如應用程序的端口號、上下文路徑等。這些配置位于 SpringBoot jar 包中的默認配置文件中。
  2. 用戶自定義配置:如果應用程序中有自定義的配置文件,Spring Boot 會首先加載這些文件。用戶可以通過在應用程序的 classpath 下放置一個名為 application.properties 或 application.yml 的文件來提供自定義配置。
  3. 命令行參數:在啟動應用程序時,可以通過命令行參數來傳遞配置。這些參數會被加載并覆蓋默認配置和用戶自定義配置。
  4. 環境變量:環境變量也可以提供配置信息。如果應用程序中定義了環境變量,它們將被加載并覆蓋默認配置、用戶自定義配置和命令行參數。
  5. 系統屬性:系統屬性也可以提供配置信息。如果應用程序中定義了系統屬性,它們將被加載并覆蓋默認配置、用戶自定義配置、命令行參數和環境變量。

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

結束語

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

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

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2023-06-02 16:24:46

SpringBootSSM

2024-12-16 08:10:00

Spring開發

2025-06-19 09:53:30

Spring性能優化服務器

2017-03-06 15:43:33

Springboot啟動

2021-08-12 10:32:50

Spring Boot參數校驗分組校驗

2021-08-10 15:11:27

Spring Boot參數校驗

2024-01-10 08:20:13

參數轉換技巧

2023-03-20 13:41:00

IoC容器Spring

2020-07-03 08:00:11

Spring BootSpring Clou流程

2021-03-09 13:18:53

加密解密參數

2022-06-04 12:25:10

解密加密過濾器

2023-12-14 13:28:00

Spring流程Web

2024-02-26 00:00:00

GolangRedisDocker

2025-05-27 07:07:29

2023-11-06 07:25:51

Spring配置應用程序

2020-12-15 10:46:29

事件監聽器Spring Boot

2024-05-31 14:06:55

SpringCDSGraalVM

2024-08-30 11:11:01

2024-11-01 10:40:32

2024-05-30 08:51:28

Spring數據分布式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产一区二区三区在线观看 | 亚洲最大av | 精品国产一级 | 久久国产精品久久 | 亚洲 一区 | 国产精品久久久久久久免费观看 | av中文天堂 | 一道本视频| 国产中文字幕在线观看 | www.99re| 欧美性网| 国产在线观看免费 | 一区二区三区av | 天天射视频 | 国产精品一区二区三区四区 | 亚洲一区视频在线播放 | 国产女人与拘做受视频 | 久操福利 | 另类专区成人 | 免费a国产 | 伊人春色在线观看 | 日韩在线免费视频 | 精品国产乱码久久久久久久久 | 中文字幕av一区二区三区 | 欧美高清视频 | 国产激情在线 | 欧美日韩成人 | 欧美精品1区2区3区 免费黄篇 | 亚洲一区二区不卡在线观看 | 亚洲精品乱码8久久久久久日本 | 国产精品久久久久久久久大全 | 午夜在线小视频 | 成年网站在线观看 | 免费精品久久久久久中文字幕 | 久久一| 97色在线视频| 99re视频这里只有精品 | 日韩有码一区二区三区 | 中文视频在线 | 久久久国产精品 | 黄色一级片aaa |