在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Spring Boot配置加載相關知識

科技綠洲 ? 來源:了不起 ? 作者:了不起 ? 2023-10-07 15:47 ? 次閱讀

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配置加載相關知識,可以有效解決配置項不生效問題以及需要快速修改配置項的情況。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 文件
    +關注

    關注

    1

    文章

    578

    瀏覽量

    25250
  • 端口
    +關注

    關注

    4

    文章

    1046

    瀏覽量

    32764
  • 容器
    +關注

    關注

    0

    文章

    508

    瀏覽量

    22387
  • 應用程序
    +關注

    關注

    38

    文章

    3324

    瀏覽量

    58813
  • spring
    +關注

    關注

    0

    文章

    340

    瀏覽量

    14927
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    啟動Spring Boot項目應用的三種方法

    首先大家了解什么是Spring BootSpring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用
    發表于 01-14 17:33

    Spring Boot嵌入式Web容器原理是什么

    ,不需要配置任何特殊的XML配置,為了這個目標,Spring BootSpring 4.0框架之上提供了很多特性,幫助應用以“約定優于
    發表于 12-16 07:57

    Spring Boot從零入門1 詳述

    在開始學習Spring Boot之前,我之前從未接觸過Spring相關的項目,Java基礎還是幾年前自學的,現在估計也忘得差不多了吧,寫Spring
    的頭像 發表于 12-10 22:18 ?825次閱讀

    Spring認證」什么是Spring GraphQL?

    這個項目建立在 Boot 2.x 上,但它應該與最新的 Boot2.4.x5 相關。 要創建項目,請轉到start.spring.io并為要使用的GraphQL傳輸選擇啟動器: 啟動機
    的頭像 發表于 08-10 14:08 ?1001次閱讀
    「<b class='flag-5'>Spring</b>認證」什么是<b class='flag-5'>Spring</b> GraphQL?

    Spring認證是什么?

    ,例如:配置、組件掃描、AOP、數據訪問和事務、REST、安全、自動配置、執行器、 Spring boot測試等。
    的頭像 發表于 07-04 10:19 ?1541次閱讀
    <b class='flag-5'>Spring</b>認證是什么?

    Spring Boot特有的實踐

    Spring Boot是最流行的用于開發微服務的Java框架。在本文中,我將與你分享自2016年以來我在專業開發中使用Spring Boot所采用的最佳實踐。這些內容是基于我的個人經驗
    的頭像 發表于 09-29 10:24 ?1131次閱讀

    強大的Spring Boot 3.0要來了

    來源:OSC開源社區(ID:oschina2013) Spring Boot 3.0 首個 RC 已發布,此外還為兩個分支發布了更新:2.7.5 2.6.13。 3.0.0-RC1: https
    的頭像 發表于 10-31 11:17 ?2270次閱讀

    Spring Boot Web相關的基礎知識

    上一篇文章我們已經學會了如何通過IDEA快速建立一個Spring Boot項目,還介紹了Spring Boot項目的結構,介紹了項目配置文件
    的頭像 發表于 03-17 15:03 ?849次閱讀

    簡述Spring Boot數據校驗

    上一篇文章我們了解了Spring Boot Web相關知識,初步了解了spring-boot-starter-web,還了解了@Contr
    的頭像 發表于 03-17 15:07 ?1009次閱讀

    Spring Boot配置JSON序列化選項的幾種方法

    看看配置序列化和反序列化選項的最常用方法。 默認配置 默認情況下,Spring Boot配置將禁用以下
    的頭像 發表于 10-09 10:26 ?2640次閱讀

    Spring Boot Actuator快速入門

    一下 Spring Boot Actuator ,學習如何在 Spring Boot 2.x 中使用、配置和擴展這個監控工具。
    的頭像 發表于 10-09 17:11 ?850次閱讀

    Spring Boot啟動 Eureka流程

    在上篇中已經說過了 Eureka-Server 本質上是一個 web 應用的項目,今天就來看看 Spring Boot 是怎么啟動 Eureka 的。 Spring Boot 啟動 E
    的頭像 發表于 10-10 11:40 ?1153次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動 Eureka流程

    Spring Boot的啟動原理

    可能很多初學者會比較困惑,Spring Boot 是如何做到將應用代碼和所有的依賴打包成一個獨立的 Jar 包,因為傳統的 Java 項目打包成 Jar 包之后,需要通過 -classpath 屬性
    的頭像 發表于 10-13 11:44 ?911次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動原理

    Spring Boot 的設計目標

    Spring 框架復雜的XML配置。使用 Spring Boot 可以很容易創建一個獨立運行的、基于 Spring 的生產級應用程序,而且
    的頭像 發表于 10-13 14:56 ?777次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設計目標

    Spring事務傳播性的相關知識

    本文主要介紹了Spring事務傳播性的相關知識
    的頭像 發表于 01-10 09:29 ?684次閱讀
    <b class='flag-5'>Spring</b>事務傳播性的<b class='flag-5'>相關</b><b class='flag-5'>知識</b>
    主站蜘蛛池模板: 免费午夜视频在线观看 | 四虎精品影院4hutv四虎 | 免费一级特黄a | 日本国产高清色www视频在线 | 成年网站在线观看 | bt种子磁力天堂torrent | 最新亚洲一区二区三区四区 | 91午夜在线观看 | aaa成人| 久久综合97色综合网 | 最新欧美精品一区二区三区 | 久久99久久精品国产只有 | 一区国产传媒国产精品 | caoporn97人人做人人爱最新 | 高h办公室| 免费播放特黄特色毛片 | 婷婷开心激情网 | 国产精品久久久久久久免费大片 | 最新版天堂资源中文官网 | 久操操操 | 欧美亚洲另类在线观看 | 四虎最新地址 | bt天堂资源在线官网bt | 狠狠干天天射 | 38pao强力打造永久免费高清视频 | 久久久免费视频观看 | 久久精品久噜噜噜久久 | 999国产精品 | 狠狠丁香激情久久综合 | 亚洲久优优色优在线播放 | wwwwww色| 日本一区视频 | 久久福利青草精品资源 | 亚洲国产高清人在线 | 天天免费 | 欧美色图在线观看 | 国产欧美日韩综合精品一区二区 | 日韩免费观看的一级毛片 | 手机午夜视频 | 18岁禁黄色 | 亚洲午夜免费 |