01 Spring Cloud Config 實現配置中心

来源:https://www.cnblogs.com/sxpujs/archive/2020/02/29/12386077.html
-Advertisement-
Play Games

Spring Cloud官網: 本篇主要講 "Spring Cloud Config" ,參考內容如下: "Spring Cloud Config 2.2.1.RELEASE參考文檔" "Spring Cloud Config 實現配置中心,看這一篇就夠了" 實現簡單的配置中心 配置文件就在Spri ...


Spring Cloud官網: https://spring.io/projects/spring-cloud

本篇主要講Spring Cloud Config,參考內容如下:

實現簡單的配置中心

配置文件就在Spring官方提供的配置倉庫:https://github.com/spring-cloud-samples/config-repo

1 創建配置中心服務端

完整代碼參考:https://github.com/sxpujs/spring-cloud-examples/tree/master/config/config-server

1 新建Spring Boot項目,引入config-server

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

2 配置config相關的配置項

bootstrap.yml

spring:
  application:
    name: foo # 應用名
  profiles:
    active: dev,mysql

application.yml

server:
  port: 8888

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          basedir: target/config

3 Application啟動類,增加相關註解:

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

4 啟動服務,進行相關測試

curl localhost:8888/foo/development

{
   "name" : "foo",
   "profiles" : ["development"],
   "propertySources" : [
      {"name":"https://github.com/spring-cloud-samples/config-repo/foo-development.properties",
       "source":{"bar":"spam",
                 "foo":"from foo development"}},
      {"name":"https://github.com/spring-cloud-samples/config-repo/foo.properties", 
       "source":{"foo":"from foo props",
                 "democonfigclient.message":"hello spring io"}},
      {"name":"https://github.com/spring-cloud-samples/config-repo/application.yml (document #0)", 
       "source":{"info.url" : "https://github.com/spring-cloud-samples",
                 "info.description":"Spring Cloud Samples",
                 "foo":"baz",
                 "eureka.client.serviceUrl.defaultZone":"http://localhost:8761/eureka/"}}
   ]
}


# 訪問不存在的profile(mysql)
curl http://localhost:8888/foo/mysql
{
  "name":"foo",
  "profiles":["mysql"],
  "propertySources":[
    {"name":"https://github.com/spring-cloud-samples/config-repo/foo.properties",
     "source":{"foo":"from foo props",
               "democonfigclient.message":"hello spring io"}},
    {"name":"https://github.com/spring-cloud-samples/config-repo/application.yml (document #0)",
     "source":{"info.description":"Spring Cloud Samples",
               "info.url":"https://github.com/spring-cloud-samples",
               "eureka.client.serviceUrl.defaultZone":"http://localhost:8761/eureka/",
               "foo":"baz"}}
  ]
}


curl http://localhost:8888/foo-dev.yml  # 從結果來看,包含了

bar: spam
democonfigclient:
  message: hello from dev profile
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
foo: from foo development
info:
  description: Spring Cloud Samples
  url: https://github.com/spring-cloud-samples
my:
  prop: from application-dev.yml

2 創建配置中心客戶端,使用配置

完整代碼參考:https://github.com/sxpujs/spring-cloud-examples/tree/master/config/config-client

1 引用相關的maven依賴。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2 配置文件

bootstrap.yml

spring:
  profiles:
    active: dev
  cloud:
    config:
      uri: http://localhost:8888
  application:
    name: myapp

application.yml

management:
  endpoint:
    shutdown:
      enabled: false
  endpoints:
    web:
      exposure:
        include: "*"   # * 在yaml 文件屬於關鍵字,所以需要加引號

3 Application啟動類

@SpringBootApplication
@RestController
public class ConfigClientApplication {

    @Value("${foo}")
    private String foo;

    @Value("${my.prop}")
    private String myProp;

    @RequestMapping("/")
    public String home() {
        return "Hello World!" + myProp + "," + foo;
    }

    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }
}

4 驗證數據

訪問env埠,註意:從Spring Boot 2.x開始,不能直接訪問 http://localhost:8080/env,需要添加actuator。

curl localhost:8080    # 可以看出my.prop這個屬於是來自application-dev.yml,foo來自application.yml

Hello World!from application-dev.yml,baz


curl localhost:8080/actuator/env|json_pp

{
   "activeProfiles" : [],
   "propertySources" : [
      {"name":"server.ports","properties":{"local.server.port":{"value":8080}}},
      {
         "name" : "bootstrapProperties-https://github.com/spring-cloud-samples/config-repo/application.yml (document #0)",
         "properties" : {
            "info.url" : {"value" : "https://github.com/spring-cloud-samples"},
            "eureka.client.serviceUrl.defaultZone" : {"value" : "http://localhost:8761/eureka/"},
            "foo" : {"value" : "baz"},
            "info.description" : {"value" : "Spring Cloud Samples"}
         }
      }
   ]
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 基於JSP+Servlet開發旅游(景點賓館)系統(前臺+後臺): 開發環境: Windows操作系統開發工具: MyEclipse+Jdk+Tomcat+MYSQL資料庫運行效果圖 源碼及原文鏈接:https://javadao.xyz/forum.php?mod=viewthread&tid=6 ...
  • 匿名(lambda)函數: 作用:創始一個匿名函數對象,同 def 類似,但不提供函數名,只是一個表達式,lambda比函數簡單且可以隨時創建和銷毀,有利於減少程式的偶合度。lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。lambda 函數擁有自己的 ...
  • 線程的五種狀態 線程從創建到銷毀一般分為五種狀態,如下圖: 1) 新建 當用new關鍵字創建一個線程時,就是新建狀態。 2) 就緒 調用了 start 方法之後,線程就進入了就緒階段。此時,線程不會立即執行run方法,需要等待獲取CPU資源。 3) 運行 當線程獲得CPU時間片後,就會進入運行狀態, ...
  • 題目1 求平均分 輸入:兩行 第一行是分數個數n 第二行是這n個分數,以空格隔開 輸出: 去掉最高分與最低分後的平均成績 #include<stdio.h> float buf[1001]; void fun(int n){ for(int i=0;i<n;i++){ for(int j=0;j<n ...
  • #include <iostream> //#include(預處理指令) iostream(所嵌入的頭文件(cout,<<等操作的有關信息就是在該文件中聲明的)) using namespace std; //針對命名空間的指令 int main(){ //int(返回值類型) main(主函數名 ...
  • 有監督學習 常用分類演算法 KNN:K近鄰分類器。通過計算待分類數據點,與已知數據中所有點的距離,取距離最小的前K個點,根據"少數服從多數"的原則,將這個數據點劃分為出現次數最多的那個類別。 在sklearn中,使用sklearn.neighbors.KNeighborsClassifier創建K鄰近 ...
  • 1、格式 符號為大括弧 集合沒有順序,也不支持下標操作 集合沒有重覆的數據 2、定義的類型 #有數據 s1 = {1, 3, 4} # {1,3,4} s2 = set('asdadsdas') # {'a','s','d'} 集合沒有重覆數據,也沒有順序 # 空集合 s3 = {} # dict ...
  • 1、格式 符號為大括弧 數據為鍵值對形式出現(字典數據與數據順序沒有關係,即字典不支持下標) 各個鍵值對之間逗號隔開 2、定義的類型 # 有數據 dict1 = {'name': '小明', 'sex': '男'} # 空字典 dict2 = {} dict3 =dict() # 函數定義 3、常用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...