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

Springboot中項目的屬性配置的詳細介紹

 更新時間:2022年01月23日 10:34:54   作者:武哥聊編程  
很多時候需要用到一些配置的信息,這些信息可能在測試環(huán)境和生產(chǎn)環(huán)境下會有不同的配置,本文主要介紹了Springboot中項目的屬性配置的詳細介紹,感興趣的可以了解一下

正文

我們知道,在項目中,很多時候需要用到一些配置的信息,這些信息可能在測試環(huán)境和生產(chǎn)環(huán)境下會有不同的配置,后面根據(jù)實際業(yè)務情況有可能還會做修改,針對這種情況,我們不能將這些配置在代碼中寫死,最好就是寫到配置文件中。比如可以把這些信息寫到 application.yml 文件中。

1. 少量配置信息的情形

舉個例子,在微服務架構(gòu)中,最常見的就是某個服務需要調(diào)用其他服務來獲取其提供的相關(guān)信息,那么在該服務的配置文件中需要配置被調(diào)用的服務地址,比如在當前服務里,我們需要調(diào)用訂單微服務獲取訂單相關(guān)的信息,假設 訂單服務的端口號是 8002,那我們可以做如下配置:

server:
? port: 8001

# 配置微服務的地址
url:
? # 訂單微服務的地址
? orderUrl: http://localhost:8002

然后在業(yè)務代碼中如何獲取到這個配置的訂單服務地址呢?我們可以使用 @Value 注解來解決。在對應的類中加上一個屬性,在屬性上使用 @Value 注解即可獲取到配置文件中的配置信息,如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class ConfigController {

? ? private static final Logger LOGGER = LoggerFactory.getLogger(ConfigController.class);

? ? @Value("${url.orderUrl}")
? ? private String orderUrl;
? ??
? ? @RequestMapping("/config")
? ? public String testConfig() {
? ? ? ? LOGGER.info("=====獲取的訂單服務地址為:{}", orderUrl);
? ? ? ? return "success";
? ? }
}

@Value 注解上通過 ${key} 即可獲取配置文件中和 key 對應的 value 值。我們啟動一下項目,在瀏覽器中輸入 localhost:8080/test/config 請求服務后,可以看到控制臺會打印出訂單服務的地址:

=====獲取的訂單服務地址為:http://localhost:8002

說明我們成功獲取到了配置文件中的訂單微服務地址,在實際項目中也是這么用的,后面如果因為服務器部署的原因,需要修改某個服務的地址,那么只要在配置文件中修改即可。

2. 多個配置信息的情形

這里再引申一個問題,隨著業(yè)務復雜度的增加,一個項目中可能會有越來越多的微服務,某個模塊可能需要調(diào)用多個微服務獲取不同的信息,那么就需要在配置文件中配置多個微服務的地址??墒牵谛枰{(diào)用這些微服務的代碼中,如果這樣一個個去使用 @Value 注解引入相應的微服務地址的話,太過于繁瑣,也不科學。

所以,在實際項目中,業(yè)務繁瑣,邏輯復雜的情況下,需要考慮封裝一個或多個配置類。舉個例子:假如在當前服務中,某個業(yè)務需要同時調(diào)用訂單微服務、用戶微服務和購物車微服務,分別獲取訂單、用戶和購物車相關(guān)信息,然后對這些信息做一定的邏輯處理。那么在配置文件中,我們需要將這些微服務的地址都配置好:

# 配置多個微服務的地址
url:
? # 訂單微服務的地址
? orderUrl: http://localhost:8002
? # 用戶微服務的地址
? userUrl: http://localhost:8003
? # 購物車微服務的地址
? shoppingUrl: http://localhost:8004

也許實際業(yè)務中,遠遠不止這三個微服務,甚至十幾個都有可能。對于這種情況,我們可以先定義一個 MicroServiceUrl 類來專門保存微服務的 url,如下:

@Component
@ConfigurationProperties(prefix = "url")
public class MicroServiceUrl {

? ? private String orderUrl;
? ? private String userUrl;
? ? private String shoppingUrl;
? ? // 省去get和set方法
}

細心的朋友應該可以看到,使用 @ConfigurationProperties 注解并且使用 prefix 來指定一個前綴,然后該類中的屬性名就是配置中去掉前綴后的名字,一一對應即可。即:前綴名 + 屬性名就是配置文件中定義的 key。同時,該類上面需要加上 @Component 注解,把該類作為組件放到Spring容器中,讓 Spring 去管理,我們使用的時候直接注入即可。

需要注意的是,使用 @ConfigurationProperties 注解需要導入它的依賴:

<dependency>
?? ?<groupId>org.springframework.boot</groupId>
?? ?<artifactId>spring-boot-configuration-processor</artifactId>
?? ?<optional>true</optional>
</dependency>

OK,到此為止,我們將配置寫好了,接下來寫個 Controller 來測試一下。此時,不需要在代碼中一個個引入這些微服務的 url 了,直接通過 @Resource 注解將剛剛寫好配置類注入進來即可使用了,非常方便。如下:

@RestController
@RequestMapping("/test")
public class TestController {

? ? private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class);

? ? @Resource
? ? private MicroServiceUrl microServiceUrl;
? ??
? ? @RequestMapping("/config")
? ? public String testConfig() {
? ? ? ? LOGGER.info("=====獲取的訂單服務地址為:{}", microServiceUrl.getOrderUrl());
? ? ? ? LOGGER.info("=====獲取的用戶服務地址為:{}", microServiceUrl.getUserUrl());
? ? ? ? LOGGER.info("=====獲取的購物車服務地址為:{}", microServiceUrl.getShoppingUrl());

? ? ? ? return "success";
? ? }
}

再次啟動項目,請求一下可以看到,控制臺打印出如下信息,說明配置文件生效,同時正確獲取配置文件內(nèi)容:

=====獲取的訂單服務地址為:http://localhost:8002
=====獲取的訂單服務地址為:http://localhost:8002
=====獲取的用戶服務地址為:http://localhost:8003
=====獲取的購物車服務地址為:http://localhost:8004

3. 指定項目配置文件

我們知道,在實際項目中,一般有兩個環(huán)境:開發(fā)環(huán)境和生產(chǎn)環(huán)境。開發(fā)環(huán)境中的配置和生產(chǎn)環(huán)境中的配置往往不同,比如:環(huán)境、端口、數(shù)據(jù)庫、相關(guān)地址等等。我們不可能在開發(fā)環(huán)境調(diào)試好之后,部署到生產(chǎn)環(huán)境后,又要將配置信息全部修改成生產(chǎn)環(huán)境上的配置,這樣太麻煩,也不科學。

最好的解決方法就是開發(fā)環(huán)境和生產(chǎn)環(huán)境都有一套對用的配置信息,然后當我們在開發(fā)時,指定讀取開發(fā)環(huán)境的配置,當我們將項目部署到服務器上之后,再指定去讀取生產(chǎn)環(huán)境的配置。

我們新建兩個配置文件: application-dev.yml 和 application-pro.yml,分別用來對開發(fā)環(huán)境和生產(chǎn)環(huán)境進行相關(guān)配置。這里為了方便,我們分別設置兩個訪問端口號,開發(fā)環(huán)境用 8001,生產(chǎn)環(huán)境用 8002.

# 開發(fā)環(huán)境配置文件
server:
? port: 8001
# 開發(fā)環(huán)境配置文件
server:
? port: 8002

然后在 application.yml 文件中指定讀取哪個配置文件即可。比如我們在開發(fā)環(huán)境下,指定讀取 applicationn-dev.yml 文件,如下:

spring:
? profiles:
? ? active:
? ? - dev

這樣就可以在開發(fā)的時候,指定讀取 application-dev.yml 文件,訪問的時候使用 8001 端口,部署到服務器后,只需要將 application.yml 中指定的文件改成 application-pro.yml 即可,然后使用 8002 端口訪問,非常方便。

4. 總結(jié)

本節(jié)主要講解了 Spring Boot 中如何在業(yè)務代碼中讀取相關(guān)配置,包括單一配置和多個配置項,在微服務中,這種情況非常常見,往往會有很多其他微服務需要調(diào)用,所以封裝一個配置類來接收這些配置是個很好的處理方式。除此之外,例如數(shù)據(jù)庫相關(guān)的連接參數(shù)等等,也可以放到一個配置類中,其他遇到類似的場景,都可以這么處理。最后介紹了開發(fā)環(huán)境和生產(chǎn)環(huán)境配置的快速切換方式,省去了項目部署時,諸多配置信息的修改。

到此這篇關(guān)于Springboot中項目的屬性配置的詳細介紹的文章就介紹到這了,更多相關(guān)Springboot 項目屬性配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解在Java中如何優(yōu)雅的停止線程

    詳解在Java中如何優(yōu)雅的停止線程

    線程,作為并發(fā)編程的基礎單元,允許程序同時執(zhí)行多個任務,在Java中,線程可以理解為程序中的獨立執(zhí)行路徑,通過使用線程,開發(fā)者可以創(chuàng)建更加響應靈敏、效率更高的應用程序,本文小編將給大家介紹一下Java中如何優(yōu)雅的停止線程,需要的朋友可以參考下
    2023-11-11
  • Java線程死鎖代碼詳解

    Java線程死鎖代碼詳解

    本篇文章主要介紹了Java線程死鎖代碼詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-11-11
  • SpringMVC訪問靜態(tài)資源的方法

    SpringMVC訪問靜態(tài)資源的方法

    本篇文章主要介紹了SpringMVC訪問靜態(tài)資源的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • java Unicode和UTF-8之間轉(zhuǎn)換實例

    java Unicode和UTF-8之間轉(zhuǎn)換實例

    這篇文章主要介紹了java Unicode和UTF-8之間轉(zhuǎn)換實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 解決springcloud-eureka注冊時的ip問題

    解決springcloud-eureka注冊時的ip問題

    這篇文章主要介紹了解決springcloud-eureka注冊時的ip問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java中的迭代和遞歸詳解

    Java中的迭代和遞歸詳解

    這篇文章主要給大家介紹了關(guān)于Java中的迭代和遞歸,文章顯示分別介紹了Java中的迭代和遞歸,而后又介紹了迭代和遞歸的區(qū)別以及數(shù)形遞歸的相關(guān)內(nèi)容,文中介紹的很詳細,相信會對大家學習具有一定的參考借鑒價值,有需要的朋友們可以參考借鑒。
    2016-11-11
  • Java CountDownLatch完成異步回調(diào)實例詳解

    Java CountDownLatch完成異步回調(diào)實例詳解

    這篇文章主要介紹了Java CountDownLatch完成異步回調(diào)實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 詳解Java事件編程的使用

    詳解Java事件編程的使用

    Java事件在很多地方都可以使用,合理的使用事件編程,相比常規(guī)邏輯的編程,這可達到主次分明,讓程序吞吐量即處理能力更強,改動更少,下面我們舉一個例子說明如何使用Java使用,需要的朋友可以參考下
    2021-06-06
  • Java類的加載時機與過程

    Java類的加載時機與過程

    這篇文章主要介紹了Java類的加載時機與過程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-12-12
  • java實現(xiàn)哈夫曼文件解壓縮

    java實現(xiàn)哈夫曼文件解壓縮

    這篇文章主要為大家詳細介紹了java實現(xiàn)哈夫曼文件解壓縮,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評論