最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot加載外部依賴過程解析

 更新時間:2020年01月11日 10:19:34   作者:a-du  
這篇文章主要介紹了SpringBoot加載外部依賴過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

這篇文章主要介紹了SpringBoot加載外部依賴過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

背景

公司一個項目的大數據平臺進行改造,之前使用Structured Streaming作為實時計算框架,需要替換為替換為Kafka Streams,并使用SpringBoot包裝,使其可以納入微服務體系。

然而由于之前并沒有接觸過SpringFramework相關技術,并且項目工期較為緊張,因此只好花了2天時間看了看Spring和SpringBoot,并且在改造過程中沿用大部分原有代碼,最后套上SpringBoot的殼子(就是基本不使用Spring Data相關的封裝和DI、AOP這些特性,只是在啟動類上添加@SpringBootApplication注解,并在main()方法里面使用SpringApplication.run()方式啟動)。

問題

然后在部署過程中就遇到了一個比較蛋疼的問題:因為遺留代碼的關系,部分配置項的名稱是自定義的,并使用java.util.ResourceBundle的getString()來讀取,而為了讓項目可以注冊到Eureka以及使用SpringBoot默認的日志配置,在配置文件中配置了eureka.client.serviceUrl.defaultZone以及l(fā)ogging.file等SpringBoot內置的配置項,并使用SpringBoot內置的配置讀取方式讀取。

也就是在一個應用程序中,混合使用了兩種讀取配置文件的方式。在使用maven將應用程序“EatMalonPeople”打包后,根據微服務組大佬的友情提示,使用如下命令運行程序:

java -jar EatMalonPeople.jar

然鵝運行倒是沒問題,不過application.properties文件在jar包里面,修改配置文件需要用vim直接修改jar包。感覺這種方式略挫,不太能接受。按照以往的經驗,使用java -cp命令可以指定classpath,應用程序會優(yōu)先讀取classpath指定的外部配置文件。但是當我在config目錄下拷貝了一份application.properties文件,并修改了其中使用ResourceBundle.getString()方式讀取的配置項時,再使用:

java -cp .:./config/application.properties EatMalonPeople.jar

啟動后,發(fā)現生效的配置項仍然是EatMalonPeople.jar這個jar包內的配置項......
感覺不太科學啊。于是去查了查SpringBoot項目加載配置文件的順序,結果根據Spring官網的提示,SpringBoot加載配置文件application.properties的順序依次為:

  • 當前目錄的cofnig目錄
  • 當前目錄
  • classpath目錄下的/config目錄
  • classpath目錄

但是根據這種順序,明明應該加載config目錄下的配置文件嘛。于是在pom文件中exclude掉了配置文件:

<resources>
  <resource>
    <directory>src/main/resources</directory>
      <excludes>
        <exclude>${resource.exclude}</exclude>
      </excludes>
  </resource>
</resources>

這樣jar包內就不含有配置文件了。再次使用

java -cp .:./config/application.properties EatMalonPeople.jar

啟動后,應用程序能注冊到Eureka,然而使用ResourceBundle.getString()方法獲取的配置項竟然找不到了,直接throw出了內部封裝的找不到配置項錯誤!

天啦嚕,這是要鬧哪樣嘛。原來SpringBoot讀取配置文件的順序只能保證內部方式可以讀到,也就是說對于SpringBoot的jar包,-cp命令是沒有用的撒。沒想到我這個剛學過兩天Spring的萌新竟然碰到了這種問題,真是不給活路啊。

解決

又是一頓好找,終于在官網的另一處發(fā)現了原因。

原來SpringBoot是通過org.springframework.boot.loader.Launcher類來啟動的,這貨才是jar包中META-INF/MANIFEST.MF文件中Main-Class這個屬性的值,Launcher最后會調用我們自定義啟動類中的的main()方法(而我們自定義的啟動類是META-INF/MANIFEST.MF文件中的Start-Class屬性的值,這個屬性應該是SpringBoot特有的)。

這個類有三個子類,分別是JarLauncher,WarLauncher,PropertiesLauncher,前兩個Launcher都是不能添加外部依賴的。只有PropertiesLauncher是可以的。于是在spring-boot-maven-plugin中添加layout屬性,添加后的spring-boot-maven-plugin的配置是醬嬸兒的:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <layout>ZIP</layout>
  </configuration>
</plugin>

然后用maven重新打包,并且在運行時使用loader.path參數指定外部classpath地址:

java -Dloader.path=./config -jar EatMalonPeople.jar

這樣SpringBoot應用程序就可以使用兩種方式愉快的讀取外部配置文件啦(其實還有外部jar,也是可以的)!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • java不同線程解讀以及線程池的使用方式

    java不同線程解讀以及線程池的使用方式

    這篇文章主要介紹了java不同線程解讀以及線程池的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring Cloud Alibaba之Sentinel實現熔斷限流功能

    Spring Cloud Alibaba之Sentinel實現熔斷限流功能

    這篇文章主要介紹了Spring Cloud Alibaba之Sentinel,這里使用阿里的sentinel來實現熔斷限流功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • java語言與平臺基礎知識點

    java語言與平臺基礎知識點

    在本篇文章里小編給大家整理的是一篇關于java語言與平臺基礎知識點內容,有需要的朋友們跟著學習下。
    2019-11-11
  • spring?MVC實現簡單登錄功能

    spring?MVC實現簡單登錄功能

    這篇文章主要為大家詳細介紹了spring?MVC實現簡單登錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Java中如何將list轉為樹形結構

    Java中如何將list轉為樹形結構

    這篇文章主要介紹了Java中如何將list轉為樹形結構,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Java 實現麥克風自動錄音

    Java 實現麥克風自動錄音

    這篇文章主要介紹了Java 實現麥克風自動錄音的示例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • spring+apollo動態(tài)獲取yaml格式的配置方式

    spring+apollo動態(tài)獲取yaml格式的配置方式

    這篇文章主要介紹了spring+apollo動態(tài)獲取yaml格式的配置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • java排查一個線上死循環(huán)cpu暴漲的過程分析

    java排查一個線上死循環(huán)cpu暴漲的過程分析

    這篇文章主要介紹了java排查一個線上死循環(huán)cpu暴漲的過程分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java手寫圖書管理基本功能附代碼

    Java手寫圖書管理基本功能附代碼

    隨著網絡技術的高速發(fā)展,計算機應用的普及,利用計算機對圖書館的日常工作進行管理勢在必行,本篇文章手把手帶你用Java實現一個圖書管理系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2022-04-04
  • Java的帶GUI界面猜數字游戲的實現示例

    Java的帶GUI界面猜數字游戲的實現示例

    這篇文章主要介紹了Java的帶GUI界面猜數字游戲的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12

最新評論

孝感市| 岐山县| 贵港市| 聂拉木县| 会昌县| 柯坪县| 宁武县| 水城县| 湘乡市| 塘沽区| 饶阳县| 佛教| 沂水县| 确山县| 新绛县| 师宗县| 西充县| 抚松县| 湖北省| 寿阳县| 陈巴尔虎旗| 志丹县| 外汇| 罗甸县| 黄梅县| 天水市| 澄江县| 文水县| 洪雅县| 慈利县| 云林县| 肇庆市| 灵丘县| 徐水县| 鄯善县| 桂东县| 壤塘县| 望都县| 南投市| 阳原县| 六盘水市|