亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud-Apollo在Java中的使用是怎樣的

發布時間:2021-09-29 14:17:09 來源:億速云 閱讀:132 作者:柒染 欄目:編程語言

本篇文章給大家分享的是有關SpringCloud-Apollo在Java中的使用是怎樣的,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

普通 Java 項目中使用

加入 Apollo Client 的 Maven 依賴,代碼如下所示。

<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>1.1.0</version></dependency>

使用 API 的方式來獲取配置,具體代碼如下所示。

public class App {public static void main(String[] args) {
        Config config = ConfigService.getAppConfig();String key = "username";String defaultValue = "張三";String username = config.getProperty(key, defaultValue);
        System.out.println("username=" + username);
    }
}

通過 ConfigService 得到 Config 對象,config.getProperty() 方法可以傳入你想獲取的配置 Key,defaultValue 是當配置中心找不到配置的時候返回的默認值,避免空指針異常。

運行上面這段代碼,輸出的結果是默認值“張三”。因為我們還沒有指定 Apollo 需要的一些必要信息,這些信息包括 Meta Server、AppId 和 Environment。Cluster 可以不用指定,用默認即可。

1. Meta Server 配置

Apollo 支持應用在不同的環境中有不同的配置,所以需要運行提供給 Apollo 客戶端當前環境的 Apollo Meta Server 信息。

在默認情況下,meta server 和 config service 是部署在同一個 JVM 進程里的,所以 meta server 的地址就是 config service 的地址。

目前我們用的快速啟動包只有一個 DEV 環境,config service 的地址是 http://localhost:8080,這個已經在啟動腳本 demo.sh 中定義好了。

為了能夠讓示例代碼在各位讀者的電腦上也能直接運行,我們將配置定在 classpath:/META-INF/app.properties 中。內容為 apollo.meta=http://localhost:8080。

2. APPid 配置

APPid 是應用的身份信息,是從服務端獲取配置的一個重要信息。同樣 APPid 的配置方式也有多種,我們采用跟 Meta Server 一樣的方式,配置在 classpath:/META-INF/app.properties 中。內容為 app.id=SampleApp。

SampleApp 在 Portal 的項目主頁面中有展示,如果是你自己新建的項目,那么就是你自定義的 AppId。

3. Environment 配置

Environment 跟項目本身沒有關系,一個項目可以部署在不同的環境中,代碼不需要改變,需要變化的只是配置值而已。所以 Environment 的配置不能配置在項目中,最常用的有如下兩種配置方式。

1)通過 Java System Property
  • 可以通過 Java 的 System Property env 來指定環境。

  • 在 Java 程序啟動腳本中,可以指定 -Denv=YOUR-ENVIRONMENT。

  • 如果是運行 jar 文件,需要注意格式為 java-Denv=YOUR-ENVIRONMENT-jar xxx.jar。

  • 注意 key 為全小寫。

2)通過配置文件
  • 最后一個推薦的方式是通過配置文件來指定 env=YOUR-ENVIRONMENT。

  • 對于 Mac/Linux,文件位置為 /opt/settings/server.properties。

  • 對于 Windows,文件位置為 C:\opt\settings\server.properties。


server.properties 內容為 env=DEV。

同樣的,為了能夠讓示例代碼能夠更方便地在各位讀者的電腦上運行,我們就用 ava System Property 的方式來指定 Environment,要么在 IDE 的啟動參數中指定,要么就在 main 方法的第一行通過代碼指定(僅供開發演示用,不能用于生產環境)。具體代碼所示。

public static void main(String[] args) {
    System.setProperty("env", "DEV");// ....}

所有配置完成之后,我們再次運行前面的示例代碼,可以看到輸出的內容就是我們自己配置的值。

4. 監聽配置變化事件

在某些場景下,當配置發生變化的時候,我們需要進行一些特殊的處理。比如,數據庫連接串變化后需要重建連接等,就可以使用 API 提供的監聽機制。具體代碼如下所示。

config.addChangeListener(new ConfigChangeListener() {public void onChange(ConfigChangeEvent changeEvent) {
        System.out.println("發生修改數據的命名空間是:" + changeEvent.getNamespace());for (String key : changeEvent.changedKeys()) {
            ConfigChange change = changeEvent.getChange(key);
            System.out.println(
                    String.format("發現修改 - 配置key: %s, 原來的值: %s, 修改后的值: %s, 操作類型: %s", 
                            change.getPropertyName(),
                            change.getOldValue(), change.getNewValue(), change.getChangeType()));
        }
    }
});

當我們在 Portal 中進行修改配置時,就會觸發監聽事件,輸出結果為:

發生修改數據的命名空間是:application
發現修改 - 配置key: username, 原來的值: zhangsan, 修改后的值: zhangsan1, 操作類型: MODIFIED

Spring Boot 中使用

首先準備一個 Spring Boot 項目,加入 Apollo Client 的 Maven 依賴,具體代碼如下所示:

<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>1.1.0</version></dependency>

然后配置 Apollo 的信息,配置放在 application.properties 中:

app.id=SampleAppapollo.meta=http://localhost:8080apollo.bootstrap.enabled=trueapollo.bootstrap.namespaces=application

其中,

  • app.id:身份信息。

  • apollo.meta:Meta Server(Config Service)。

  • apollo.bootstrap.enabled:項目啟動的 bootstrap 階段,向 Spring 容器注入配置信息。

  • apollo.bootstrap.namespaces:注入命名空間。

環境同樣在 main 方法中指定,代碼如下所示。

@SpringBootApplicationpublic class App {public static void main(String[] args) {// 指定環境(僅供開發演示用, 不能用于生產環境))System.setProperty("env", "DEV");
        SpringApplication.run(App.class, args);
    }
}
1. Placeholder 注入配置

Placeholder 注入配置代碼如下所示。

/**
* 用戶名, 默認值為zhangsan
*/@Value("${username:zhangsan}")private String username;
2. Java Config 使用方式

Java Config 使用方式具體代碼如下所示。

@Data@Configurationpublic class UserConfig {@Value("${username:zhangsan}")
    private String username;
}

使用 Config 配置類注入具體代碼如下所示:

@Autowiredprivate UserConfig userConfig;
3. ConfigurationProperties 使用方式

ConfigurationProperties 的使用方法具體代碼如下所示。

@Data@Configuration@ConfigurationProperties(prefix = "redis.cache")
public class RedisConfig {private String host;
}

配置中心只需要增加 redis.cache.host 配置項即可實現注入,配置內容如下:

redis.cache.host = 192.168.1.1

ConfigurationProperties 方式有個缺點,當配置的值發生變化時不會自動刷新,而是需要手動實現刷新邏輯,筆者建議大家不要使用這種方式,比較繁瑣。

如果有配置需要加統一前綴的方式可以用 Java Config 的方式代替。

4. Spring Annotation 支持
1)@ApolloConfig

用來自動注入 Apollo Config 對象,代碼如下所示。

@ApolloConfigprivate Config config;@GetMapping("/config/getUserName3")public String getUserName3() {return config.getProperty("username", "zhangsan");
}
2)@ApolloConfigChangeListener

用來自動注冊 ConfigChangeListener,代碼如下所示。

@ApolloConfigChangeListenerprivate void someOnChange(ConfigChangeEvent changeEvent) {if(changeEvent.isChanged("username")) {
        System.out.println("username發生修改了");
    }
}
3)@ApolloJsonValue

用來把配置的 JSON 字符串自動注入為對象。

定義一個實體類,代碼如下所示。

@Datapublic class Student {private int id;private String name;
}

對象注入,代碼如下所示。

@ApolloJsonValue("${stus:[]}")private List<Student> stus;

后臺增加配置內容如下:

stus = [{"id":1,"name":"jason"}]

以上就是SpringCloud-Apollo在Java中的使用是怎樣的,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湟源县| 莲花县| 贵阳市| 达孜县| 仁化县| 钦州市| 改则县| 灌云县| 安庆市| 吐鲁番市| 安龙县| 辽源市| 呈贡县| 中阳县| 阳西县| 惠来县| 安西县| 边坝县| 南岸区| 丰城市| 石城县| 新巴尔虎左旗| 海门市| 凤台县| 新化县| 隆子县| 建始县| 遂川县| 莎车县| 松滋市| 长白| 自贡市| 景东| 武乡县| 峨山| 仙游县| 镇安县| 孙吴县| 富顺县| 固原市| 班玛县|