apollo java客戶端_攜程配置中心Apollo的Java客戶端API的使用

一、SpringBoot集成

1.發布配置信息

設置本機為DEV環境:Linux在/opt/settings/server.properties增加配置env=DEV,windows在c:\opt\settings\server.properties

aae8900ce5ccbf8e3f611d4cf4f828e8.png 圖1

在apollo portal上新建項目后,默認就有了application命名空間。在DEV環境下新建一個名為test_namespace的命名空間。

在application上發布:spring.applicaton.name=apollo_demo,server.port=9000。

在test_name上發布:name=name1, value=value2。

2.引入依賴

org.springframework.boot

spring-boot-stater

org.springframework.boot

spring-boot-starter-web

org.projectlombok

lombok

${lombok.version}

provided

com.ctrip.framework.apollo

apollo-client

${apollo.version}

3.項目配置

在項目的application.properties(applicaiton.yml)或者/META-INF/app.properties填入app.id=appId(在apollo-portal上新建項目時填寫的appId,表示獲取的是那個配置項目的配置信息)。

resources目錄下新建apollo-env.properties,填寫各個環境的meta server地址:

d08104e871384b16192ad9c45fc3612f.png 圖2

3) 或者不在項目配置apollo-env.properties,而是直接在application.properties指定apollo.meta=ip:port的方式來執行需要讀取配置的的服務

使用application命名空間的配置信息來啟動SpringBoot應用 入口方法增加@EnableApolloConfig注解

@SpringBootApplication

@EnableApolloConfig

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

如果不使用@EnableApolloConfig注解,可以在application.properties里面配置apollo.bootstrap.enabled=true,效果一樣。 使用apollo.bootstrap.namespaces = application,test_namespace可以指定命名空間。

啟動項目:

dd483975f7c6544da71060225646c249.png 圖3

可以看到應用在啟動前從配置中心獲取配置信息來啟動應用。 `@EnableApolloConfig`默認是從application命名空間獲取配置的,相當于`@EnableApolloConfig("application")`.。

4.獲取配置

application命名空間配置信息 java bean:

@Component

@EnableApolloConfig

@Getter

@Setter

@ToString

public class AppNamespace {

@Value("${spring.application.name:}")

private String name;

@Value("${server.port:}")

private String value;

}

java bean:

@Component

@EnableApolloConfig("CASE.test_namespace")

@Getter

@Setter

@ToString

public class TestNamespace {

@Value("${name}")

private String name;

@Value("${value}")

private String value;

}

使用:

@RestController

public class DemoController {

@Autowired

private TestNamespace demo;

@Autowired

private AppNamespace application;

@ApolloConfig

private Config appConfig;

@ApolloConfig("CASE.test_namespace")

private Config testConfig1;

private Config testConfig2 = ConfigService.getConfig("CASE.test_namespace");

}

以上兩種方式獲取配置信息的值,會跟配置中心的更改同步(1秒內);還可以使用@ConfigurationProperties來獲取配置信息,但這種方式不會同步更新,需要額外的編碼配置才能實現,具體查看官方文檔。

5.其他

@ApolloJsonValue注解,作用相當于@Value,將JSON字符串轉成對象。

@ApolloConfigChangeListener注解::

@ApolloConfigChangeListener

private void someOnChange(ConfigChangeEvent changeEvent) {

//update injected value of batch if it is changed in Apollo

if (changeEvent.isChanged("key")) {

System.out.println(config.getIntProperty("key", ""));

}

}

@ApolloConfigChangeListener相當于@ApolloConfigChangeListener("application")

相當于:

Config config = ConfigService.getAppConfig();

config.addChangeListener(new ConfigChangeListener() {

@Override

public void onChange(ConfigChangeEvent changeEvent) {

System.out.println("Changes for namespace " + changeEvent.getNamespace());

for (String key : changeEvent.changedKeys()) {

ConfigChange change = changeEvent.getChange(key);

System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));

}

}

});

如果同時以兩種方式綁定changeListener的方式,只有ConfigService實例的監聽器會生效。

2.其他

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271171.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271171.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271171.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JNI----Native本地方法接口

Native本地方法接口 JNI:Java Native Interface 本地接口的作用是融合不同的編程語言為Java所用,它的初衷是融合C/C程序 native:凡是帶native關鍵字的,說明java的作用范圍達不到了,會去調用底層c語言的庫&#xff01…

python的flag是什么意思_網上老說的flag是什么意思

近些年,國內的網絡發展速度還是很快的,大家可以通過網絡了解很多的東西,因此網絡上也有很多熱詞開始流行起來,其中flag算是十分流行的一個詞匯,網上老說的flag是什么意思?立個flag是什么梗?可能還有一些朋友并不是很…

項目管理基礎:系統分析相關概念介紹

1、系統分析的主要任務系統分析主要任務是對現行的系統進一步詳細調查,將調查得到的資料集中,對組織內部整體管理狀況和信息處理過程進行分析,為系統開發提供所需要的資料,并提交系統方案說明書。2、系統分析的主要階段系統分析主…

java線程池和線程實例化_淺談Java 線程池原理及使用方式

一、簡介什么是線程池?池的概念大家也許都有所聽聞,池就是相當于一個容器,里面有許許多多的東西你可以即拿即用。java中有線程池、連接池等等。線程池就是在系統啟動或者實例化池時創建一些空閑的線程,等待工作調度,執…

線性代數及其應用_線性代數入門——行列式的簡單應用選講

系列簡介:這個系列文章講解線性代數的基礎內容,注重學習方法的培養。線性代數課程的一個重要特點(也是難點)是概念眾多,而且各概念間有著千絲萬縷的聯系,對于初學者不易理解的問題我們會不惜筆墨加以解釋。在內容上,以…

RocketMQ 使用及常見問題

前言 本文檔是針對RocketMQ使用及常見問題的說明。 一.獲取項目、安裝包及文檔 1. alibaba/RocketMQ https://github.com/alibaba/RocketMQ 2. Download the latest release package https://github.com/alibaba/RocketMQ/releases 3.…

系統開發基礎:UML相關知識筆記

1、UML概念統一建模語言(Unified Modeling Language UML)是面向對象軟件的標準建模語言。由于簡單、統一,又能夠表達軟件設計中的動態和靜態信息。目前UML已經成為可視化建模語言的工業標準。2、UML的組成UML三要素:構造塊、規則、…

java中什么是運行異常_在java中最常用的運行時異常是什么?

我從不會拋出NullPointerException。對我來說,它是一個出現在代碼中當出現問題時,需要開發人員看看會發生什么。然后(s)他固定的原因,它不會再次發生。我使用IllegalStateException表示對象配置不正確或調用的順序不正確。但是,我…

迭代器 java_面試必備(含答案):30 個 Java 高頻面試問題

Java集合框架為Java編程語言的基礎,也是Java面試中很重要的一個知識點。這里,我列出了一些關于Java集合的重要問題和答案。1.Java集合框架是什么?說出一些集合框架的優點?每種編程語言中都有集合,最初的Java版本包含幾…

硬件基礎:臺式電腦上的常用的幾個接口!

今天給大家詳細講解臺式電腦上的常用的幾個接口!1、I/O接口部分下圖所有的接口,也是我們機箱后面的接口,統稱為:I/O接口。2、鍵鼠PS/2PS/2接口是I/O接口中比較常見的一種接口,用來連接鍵盤和鼠標,二者可以用…

CSS-DOM介紹

三位一體的網頁: 我們在瀏覽器里看到的網頁其實是由以下三層信息構成的一個共同體: 1、結構層: 結構層是由HTML和XHTML之類的標記語言所構成的。所就是哪些出現在html標簽里面的單詞,對網頁內容的語義含義作出了如下描述&#xff0c;例如&#xff0c;<p>This is a paragr…

java 開發注意項_JAVA開發注意事項集錦

本篇博客用于持續記錄開發過程中的常用的需要注意的事項&#xff0c;都是嚴重的生產問題大家總結出來的、記得持續更新喔。一&#xff0c;不要以時間戳作為唯一健時間戳精確到ms級別&#xff0c;并不能作為唯一入口參數&#xff0c;數據庫更新唯一查詢參數&#xff0c;唯一健需…

系統開發基礎:UML中圖的相關知識筆記(上)

1、圖的概念圖(Diagram) 是一組元素的圖形表示&#xff0c;大多數情況下&#xff0c;把圖畫成頂點&#xff08;代表事物&#xff09;和弧(表示關系)的連通圖。2、UML中圖的分類UML2.0中的圖主要有&#xff1a;類圖、對象圖、用例圖、序列圖、通信圖、狀態圖、活動圖、構件圖、部…

python循環頂帖_設計Python數據庫連接池1-對象的循環引用問題

在Python中如果對象定義了__del__方法的話&#xff0c;在對象的引用記數為0時會自動調用__del__方法(很象c中的析構函數)&#xff0c;但如果A對象引用B對象&#xff0c;B對象又引用A對象&#xff0c;就形成循環引用&#xff0c;此時A&#xff0c;B對象引用次數都為1。python就無…

編譯時類型 和運行時類型的 區別(1)

class T{ void f(int x){ System.out.println("int in T:" x); } void f(double x){ System.out.println("double in T:"x); } void f(Object x){ System.out.println("Object in T:" x); }} class S extends T{ void f(int x){  //子類覆蓋基…

系統開發基礎:UML中圖的相關知識筆記(下)

1、狀態圖狀態圖展現了一個狀態機&#xff0c;它由狀態、轉換、事件、活動組成。狀態圖關注系統的動態視圖&#xff0c;它對于接口、類、協作的行為建模尤為重要&#xff0c;它強調對象行為的事件順序。組成&#xff1a;簡單狀態、組合狀態、轉換&#xff08;事件和動作&#x…

java京東左側固定層_京東首頁右側固定層

需求說明制作京東首頁右側的固定層&#xff0c;6個圖標&#xff1a;京東會員、購物車、我的關注、我的足跡、我的消息和咨詢JIMI默認狀態下僅顯示圖標&#xff0c;背景顏色為深灰色&#xff1b;當鼠標移至圖標上時&#xff0c;背景顏色為深紅色&#xff0c;并且顯示文本css*{ma…