❶ Spring Cloud-Nacos配置管理
前置文章:
一、Spring Cloud-Erueka服務注冊&發現
二、Spring Cloud-Nacos服務注冊&發現
tips:Ctrl + F定位到所需內容快速閱讀吧。
①常規項目:項目啟動→讀取application.yml配置文件→創建Spring IOC容器→載入Bean;
②Nacos配置中心項目:項目啟動→讀取Nacos配置中心文件→讀取application.yml配置文件→創建Spring IOC容器→載入Bean;
注意 :此處的問題是Nacos server-addr相關配置在application.yml中,所以引入bootstrap.yml配置,來提前載入Nacos配置中心所需配置。
③Nacos配置中心項目:項目啟動→讀取bootstrap.yml配置文件→讀取Nacos配置中心文件→讀取application.yml配置文件→創建Spring IOC容器→載入Bean;
注意 :SpringCloud2020及以後的版本默認不啟用 bootstrap 配置,我們需要在pom裡面顯式地引入,以開啟bootstrap.yml配置文件讀取的支持。
user服務讀取配置中心配置三要素:
①spring-application-name:應用名稱-userservice;
②spring-profiles-active:配置文件環境-dev(代表開發環境develop);
③file-extension:文件擴展名-yaml;
配置中心處,配置文件完整名稱:userservice-dev.yaml
①配置管理→配置列表→➕
②編寫userservice-dev.yaml配置文件
①@Value註解注入配置屬性
②方法內讀取配置
在對應的@Value註解使用的類上使用@RefreshScope註解
編寫Config類:prefix = "pattern" + [field] dateformat,與配置文件pattern.dateformat 對應即可。
配置優先順序 :[spring-application-name][spring-profiles-active][file-extension]>[spring-application-name][file-extension]>本地配置;
即:服務名-環境類型.yaml>服務名.yaml>本地配置。
如果配置不同,則合並,相同則優先順序高的覆蓋優先順序低的。
另外:extension-configs的載入後於shared-configs。
以上即為Nacos配置管理的基礎內容,感謝閱讀。
❷ SpringBoot配置文件存放位置以及讀取順序
默認情況下,我們可以將application.properties或者application.yaml(為了方便演示,本文以下均以application.properties介紹)放置在如下四處:
1.1、idea中,為了我們本地方便開發測試,我們在此處創建一個config目錄,然後把application.properties放進去,項目正常運行。
jar包會自動生成在target目錄下。
我們將生成的jar包,復制出來,到另外文件夾進行運行,比如,我現在該jar包復制到test目錄下,但是這個時候是起不來,因為沒有配置文件,雖然我們在idea裡面是有config目錄的,但是它並不沒有被打包進去。我們要把config目錄也復制過來,跟該jar包放在同一個目錄下。
在此處,我們可以使用java -jar demo-0.01-SNAPSHOT來運行項目。
正常運行。
當我們將其打成jar包時,application.properties同樣不會被打包進jar包中。需要另外復制出來和jar包放在才能正常運行。
推薦以上兩種方式來放置配置文件,如果不寫開發,測試,和生產好幾套環境配置文件的話,就可以直接打開配置文件,改成自己需要的配置即可。
以下兩種方式是將該配置文件打包在jar包裡面了,即便只改一個埠號,開發人員先改配置文件,再打包,再運行。此處也記錄下,並解開jar包,看下該配置文件被打包後,放置的位置。
打包後,如下圖,jar包再target裡面,我們尋找下application.properties文件。為了方便演示,我們將target目錄下的demo-0.0.1-SNAPSHOT.jar放到一個新目錄給它解壓開,找下該配置文件,我放置到了一個test目錄下。
解壓後:如下圖,我們進入目錄
發現config目錄被放置在classes目錄下。然後這也就讓我們明白了,什麼是classpath?classpath的路徑到底指的是哪裡,在idea中我們就把它放置在resource目錄,該目錄就是表示classpath。而被打成jar包後classes目錄就是所謂的classpath。
所有的yaml文件,同理。
❸ 使用 IDEA 從 0 開始搭建 Spring Cloud 微服務
以下內容均來源於一個微服務初學者的實踐,僅供參考。
首先啟動 Spring Cloud Eureka 注冊中心,其他部分都作為服務注冊到 Eureka ,並通過注冊的服務名互相訪問。Spring Cloud Config 提供統一的配置信息,供其他服務讀取。Provider 生產者服務不直接對外暴露,僅供 Consumer 消費者服務調用。用戶通過 Spring Cloud Gateway 統一訪問消費者服務。
首先創建一個空 Maven 項目,然後右鍵項目 -> New Mole ,選擇繼續創建空 Maven 模塊或者使用 Spring Initializr 構建 Spring Cloud 模塊。common模塊用於存放公共的 lib ,如 、model 、util 等。config-dev 存放配置文件,上傳到 git 之後供 Spring Cloud Config 讀取。
除了少數像 Spring Cloud Config 、Spring Cloud Gateway 這種獨立應用,大部分非空模塊都需要添加 spring-boot-starter-web 構建 Web 應用。下圖是使用 IDEA 的 Spring Initializr 快速構建新模塊。
下面貼上詳細的配置文件和註解,bootstrap.yml 具有高優先順序,會提前載入並且不會被 application.yml 覆蓋,spring.cloud.config 需要配置在 bootstrap.yml 中,否則不能正常從配置中心獲取配置信息。
application.yml
HobbyEurekaApplication.java
application.yml
application-dev.yml
HobbyConfigApplication.java
bootstrap.yml
config-dev/gateway.yml
HobbyGatewayApplication.java
在 Spring Cloud Gateway 的配置中已經展示過如何從 config-dev 配置倉庫中讀取配置文件。spring.cloud.config 和 eureka.client 都已經在 bootstrap.yml 中配置過,接下來不做贅述。多模塊項目中掃描其他模塊的 mybatis 文件需要做額外的配置。
application.yml
HobbyProviderTestApplication.java
消費者調用生產者可以使用 Feign 聲明式服務調用。
HobbyConsumerTestApplication.java
TestFeignService.java
TestServiceImpl.java
Spring Cloud Eureka >> Spring Cloud Config >> Spring Cloud Gateway >> 其他服務
微服務架構能夠將各種服務解耦,單獨部署,配合 devops 才能展現出真正的威力,否則運維的工作會苦不堪言。gitlab 目前已經集成了 devops 功能,只要在項目中添加 .gitlab-ci.yml ,push 到 Gitlab 之後就會自動執行配置的命令,這里簡單介紹一下 gitlab 的安裝部署。
CentOS7 自帶的 Git 版本號是 1.8.3.1 ,需要更新,否則 Gitlab Runner 在進行自動構建的時候會報錯 fatal: git fetch-pack: expected shallow list ,更新步驟如下:
Gitlab 安裝官方文檔
Gitlab Runner 安裝官方文檔
配置文件的地址 /etc/gitlab/gitlab.rb
修改配置文件的操作:
常用配置:
❹ springboot實現動態載入遠程配置文件
有個獨立的API項目,該項目主要是對外部各個系統提供API介面,為了保證調用的安全,需要對請求進行校驗,主要校驗包括調用頻率,訪問IP,是否跨域和Token,其中IP和是否跨域的配置會根據接入方進行相應的修改,為了避免每次有新的接入方就得去修改一次配置文件並重啟項目,所以打算使用動態配置的方式。
初級實現方案:API服務每隔5分鍾向管理端請求一次數據,管理端添加IP和域白名單的管理,這個實現方案,簡單好用,但是弊端也明顯,管理端每次修改完配置後,客戶端需要等待下次請求後才會載入對應的配置,同時,還需要自己管理獲取到的配置文件
更新方案:在springboot啟動時,先從遠端獲取配置文件,並將其載入進Environment對象中,其餘的,就都交給Spring了。同時配合spring-cloud-context實現遠程配置變更後,本地重新拉取配置並更新
點進去之後,springboot會在這里初始化ConfigurableEnvironment對象
這里是給ConfigurableEnvironment做一些初始化工作,我們先不管了,重點在這里,listeners.environmentPrepared(environment);,Springboot通過事件,將Environment的載入分發出去
到此為止,我們就能像使用本地配置文件一樣使用伺服器上的配置文件了,但是這里還只實現了載入遠程配置文件,我們還需要在遠程配置文件變更時,實現配置文件的熱更新