11111111111
知識共享平臺
知識共享平臺

討教大學(xué)平臺

  • 首頁
  • 免費課
  • 精品課
  • 討教題庫
  • 企業(yè)服務(wù)

    hot

  • 下載APP
  • 證書查詢
  • 關(guān)于我們
我問
討教號
搜索
消息
  • 我的文章

    我的關(guān)注

    我的問答

    我的秘密

    我的評論

    我的訂閱

    我的打賞

    我的錢包

    我的通知

    我的設(shè)置

    退出登錄

  • ×

    登錄

    討教 | 通行證

    登錄
    立即注冊
    忘記密碼?
    使用微信登錄

    提問 ×

    寫下你的問題,準(zhǔn)確的表述更容易得到答案

    類型話題

    選擇支付方式
    您的討教幣 111 付費金額

    国产第一亚洲_浪货一天不做就难受呀_欧洲视频在线观看_亚洲精品一区二区三区美女

    <abbr id="uyuky"><code id="uyuky"></code></abbr>
    • <li id="uyuky"></li>
    • <code id="uyuky"><tbody id="uyuky"></tbody></code>
      <s id="uyuky"></s>
    • <s id="uyuky"></s>
      <strike id="uyuky"><tbody id="uyuky"></tbody></strike>
        <s id="uyuky"></s>

        Spring Boot 2.0 整合攜程Apollo配置中心

        JAVA葵花寶典
        2019-06-17 16:22:52
        16篇 作品
        2102 總閱讀量

        Apollo(阿波羅)是攜程框架部門研發(fā)的分布式配置中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場景。

        服務(wù)端基于Spring Boot和Spring Cloud開發(fā),打包后可以直接運行,不需要額外安裝Tomcat等應(yīng)用容器。

        Java客戶端不依賴任何框架,能夠運行于所有Java運行時環(huán)境,同時對Spring/Spring Boot環(huán)境也有較好的支持。

        .Net客戶端不依賴任何框架,能夠運行于所有.Net運行時環(huán)境。

        如果想要深入了解,可以到github上參見Apollo配置中心,官網(wǎng)的介紹很詳細。本章主要講述Spring Boot 2.0 整合Apollo配置中心。


        一、Apollo配置中心服務(wù)端(來源于官網(wǎng))


        本文的重點在于Apollo在客戶端的使用,所以Apollo服務(wù)端使用的是官網(wǎng)提供的 Quick Start(針對本地測試使用),后續(xù)文章會專門講述Apollo服務(wù)端在分布式環(huán)境下的部署。


        1.1 準(zhǔn)備工作


        1. Java
          Apollo服務(wù)端要求Java 1.8+,客戶端要求Java 1.7+,筆者本地使用的是Java 1.8。

        2. MySQL
          Apollo的表結(jié)構(gòu)對timestamp使用了多個default聲明,所以需要5.6.5以上版本。筆者本地使用的是8.0.13版本

        3. 下載 Quick Start
          官網(wǎng)為我們準(zhǔn)備了 Quick Start 安裝包。大家只需要下載到本地,就可以直接使用,免去了編譯、打包過程。大家可以到github下載,也可以通過百度云盤下載


        1.2 安裝步驟


        1.2.1 創(chuàng)建數(shù)據(jù)庫


        Apollo服務(wù)端共需要兩個數(shù)據(jù)庫:ApolloPortalDB和ApolloConfigDB,官網(wǎng)把數(shù)據(jù)庫、表的創(chuàng)建和樣例數(shù)據(jù)都分別準(zhǔn)備了sql文件(在下載的 Quick Start 安裝包的sql目錄下),只需要導(dǎo)入數(shù)據(jù)庫即可。


        1.2.1.1 創(chuàng)建ApolloPortalDB


        通過各種Mysql客戶端(Navicat,DataGrip等)導(dǎo)入sql/apolloportaldb.sql即可
        下面以MySQL原生客戶端為例:

        source /your_local_path/sql/apolloportaldb.sql


        導(dǎo)入成功后,可以通過執(zhí)行以下sql語句來驗證:

        select `Id`, `AppId`, `Name` from ApolloPortalDB.App;
        IdAppIdName
        1SampleAppSample App

        通過各種Mysql客戶端(Navicat,DataGrip等)導(dǎo)入sql/apolloconfigdb.sql即可
        下面以MySQL原生客戶端為例:

        source /your_local_path/sql/apolloconfigdb.sql


        導(dǎo)入成功后,可以通過執(zhí)行以下sql語句來驗證:

        select `NamespaceId`, `Key`, `Value`, `Comment` from ApolloConfigDB.Item;
        

        NamespaceId Key Value Comment
        1 timeout 100 sample
        1.2.2 配置數(shù)據(jù)庫連接信息

        Apollo服務(wù)端需要知道如何連接到你前面創(chuàng)建的數(shù)據(jù)庫,所以需要編輯demo.sh,修改ApolloPortalDB和ApolloConfigDB相關(guān)的數(shù)據(jù)庫連接串信息。

        #apollo config db info
        apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
        apollo_config_db_username=用戶名
        apollo_config_db_password=密碼(如果沒有密碼,留空即可)

        # apollo portal db info
        apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
        apollo_portal_db_username=用戶名
        apollo_portal_db_password=密碼(如果沒有密碼,留空即可)

        1.3 啟動Apollo配置中心


        1.3.1 確保端口未被占用


        Quick Start腳本會在本地啟動3個服務(wù),分別使用8070, 8080, 8090端口,請確保這3個端口當(dāng)前沒有被使用。例如,在Linux/Mac下,可以通過如下命令檢查:

        lsof -i:8080


        在windows下,可以通過如下命令檢查:

        netstat -aon|findstr "8080"


        1.3.2 執(zhí)行啟動腳本


        在Quick Start目錄下執(zhí)行如下命令:

        ./demo.sh start


        當(dāng)看到如下輸出后,就說明啟動成功了!

        ==== starting service ====
        Service logging file is ./service/apollo-service.log
        Started [10768]
        Waiting for config service startup.......
        Config service started. You may visit http://localhost:8080 for service status now!
        Waiting for admin service startup....
        Admin service started
        ==== starting portal ====
        Portal logging file is ./portal/apollo-portal.log
        Started [10846]
        Waiting for portal startup......
        Portal started. You can visit http://localhost:8070 now!


        1.3.3 異常排查


        如果啟動遇到了異常,可以分別查看service和portal目錄下的log文件排查問題。

        注: 在啟動apollo-configservice的過程中會在日志中輸出eureka注冊失敗的信息,如com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused。需要注意的是,這個是預(yù)期的情況,因為apollo-configservice需要向Meta Server(它自己)注冊服務(wù),但是因為在啟動過程中,自己還沒起來,所以會報這個錯。后面會進行重試的動作,所以等自己服務(wù)起來后就會注冊正常了。


        1.4 使用Apollo配置中心


        1.4.1 查看樣例配置


        1. 瀏覽器訪問http://localhost:8070

        1. Quick Start集成了Spring Security簡單認證,更多信息可以參考Portal 實現(xiàn)用戶登錄功能

        2. 輸入用戶名apollo,密碼admin登錄

        1. 配置中心中包含一個默認的項目SampleApp

        2. 點擊SampleApp進入配置界面,可以看到當(dāng)前有一個配置timeout=100

        1. 如果提示系統(tǒng)出錯,請重試或聯(lián)系系統(tǒng)負責(zé)人,請稍后幾秒鐘重試一下,因為通過Eureka注冊的服務(wù)有一個刷新的延時。


        1.4.2 新增項目配置


        我們的客戶端使用apollo需要新增相關(guān)的項目配置。

        點擊新建項目

        點擊提交,創(chuàng)建完成

          • 應(yīng)用ID:這個ID是應(yīng)用的唯一標(biāo)識

          • 應(yīng)用名稱:應(yīng)用的名稱,會展示在配置中心的首頁上


        1. 新增配置信息
          點擊新增配置,填寫配置信息

        點擊提交,此時配置還未生效。


        發(fā)布配置
        點擊發(fā)布,配置立刻生效


        回滾
        如果配置做了修改之后,發(fā)現(xiàn)配置更改錯誤,這個時候可以使用回滾功能,回到上一個配置

        二、Apollo配置中心客戶端


        我們客戶端基于Spring Boot 2.0搭建,開發(fā)工具是InteIIij IDEA。新建一個項目,項目名稱為apollo-client


        2.1 客戶端搭建


        添加Apollo客戶端依賴

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

        添加配置信息


        # 應(yīng)用ID(在Apollo服務(wù)端新增項目添加的應(yīng)用ID)
        app.id=testclient
        # apollo-configservice地址
        apollo.meta=http://127.0.0.1:808

          在項目的啟動類上添加@EnableApolloConfig注解


        新增一個測試接口

        @RequestMapping("/index")
        public String hello(){
        return "hello man";
        }

        啟動服務(wù)測試
        在Apollo配置中心中,我們對該項目有一條配置server.port = 9000,啟動服務(wù),訪問http://localhost:9000/index,返回hello man。證明,客戶端是從服務(wù)端獲取的配置。


        2.2 客戶端用法


        在上一節(jié),我們簡單的搭建了客戶端,成功的使用服務(wù)端配置。Apollo為我們提供的使用方式有很多種,下面只介紹Spring Boot 2.0環(huán)境下的使用方式。


        2.2.1 Spring Placeholder的使用


        Spring應(yīng)用通常會使用Placeholder來注入配置,使用的格式形如${someKey:someDefaultValue},如${timeout:100}。冒號前面的是key,冒號后面的是默認值(建議在實際使用時盡量給出默認值,以免由于key沒有定義導(dǎo)致運行時錯誤)。Apollo從v0.10.0開始的版本支持placeholder在運行時自動更新。如果需要關(guān)閉placeholder在運行時自動更新功能,可以通過以下兩種方式關(guān)閉:


        1. 通過設(shè)置System Property apollo.autoUpdateInjectedSpringProperties,如啟動時傳入-Dapollo.autoUpdateInjectedSpringProperties=false

        2. 通過設(shè)置META-INF/app.properties中的apollo.autoUpdateInjectedSpringProperties=false


        2.2.1.1 Java Config使用方式


        1. 新建配置類JavaConfigBean如下:



          /**
          * Java Config方式
          *
          * @author simon
          * @create 2018-11-02 15:00
          **/
          @Configuration
          public class JavaConfigBean {
          @Value("${timeout:20}")
          private int timeout;

          public int getTimeout() {
          return timeout;
          }
          }
        2. 新增訪問端點

            
          //1.Java Config方式
          @Autowired
          JavaConfigBean javaConfigBean;

          @RequestMapping("/index1")
          public String hello1(){
          return javaConfigBean.getTimeout()+"";
          }
        3. 測試
          瀏覽器訪問http://127.0.0.1:8080/index1,正確返回配置的值


        2.2.1.2 ConfigurationProperties使用方式


        Spring Boot提供了@ConfigurationProperties把配置注入到bean對象中。Apollo也支持這種方式,下面的例子會把redis.cache.expireSeconds和redis.cache.commandTimeout分別注入到SampleRedisConfig的expireSeconds和commandTimeout字段中。


        1. 新增配置類SampleRedisConfig如下:



          /**
          * ConfigurationProperties使用方式
          *
          * @author simon
          * @create 2018-11-02 9:30
          **/
          @Configuration
          @ConfigurationProperties(prefix = "redis.cache")
          public class SampleRedisConfig {
          private int expireSeconds;
          private int commandTimeout;

          public void setExpireSeconds(int expireSeconds) {
          this.expireSeconds = expireSeconds;
          }

          public void setCommandTimeout(int commandTimeout) {
          this.commandTimeout = commandTimeout;
          }

          public int getExpireSeconds() {
          return expireSeconds;
          }

          public int getCommandTimeout() {
          return commandTimeout;
          }
          }

        2. 新增訪問端點


          //2. ConfigurationProperties使用方式
          @Autowired
          SampleRedisConfig sampleRedisConfig;

          @RequestMapping("/index2")
          public String hello2(){
          return sampleRedisConfig.getCommandTimeout()+"--"+sampleRedisConfig.getExpireSeconds();
          }
        3. 測試
          瀏覽器訪問http://127.0.0.1:8080/index2,正確返回配置的值


        注: @ConfigurationProperties如果需要在Apollo配置變化時自動更新注入的值,需要配合使用EnvironmentChangeEvent或RefreshScope。這個我會在后續(xù)文章中詳細描述。


        2.2.2 Spring Annotation支持


        Apollo同時還增加了幾個新的Annotation來簡化在Spring環(huán)境中的使用。


        • @ApolloConfig用來自動注入Config對象

        • @ApolloConfigChangeListener用來自動注冊ConfigChangeListener

        • @ApolloJsonValue用來把配置的json字符串自動注入為對象


        2.2.2.1 @ApolloConfig的使用


        1. 新增訪問端點



          // 3. @ApolloConfig使用
          @ApolloConfig
          private Config config;

          @RequestMapping("/index3")
          public String hello3(){
          Set <String> propertyNames = config.getPropertyNames();
          propertyNames.forEach(key -> {
          System.err.println(key+"="+config.getIntProperty(key,0));
          });
          return propertyNames.toString();
          }
        2. 測試
          瀏覽器訪問http://127.0.0.1:8080/index3,正確打印配置的值



          redis.cache.commandTimeout=3000
          redis.cache.expireSeconds=20
          server.port=800
          timeout=200


        @ApolloConfigChangeListener的使用


        1. 新增以下代碼



          @ApolloConfigChangeListener
          private void someOnChange(ConfigChangeEvent changeEvent) {
          //update injected value of batch if it is changed in Apollo
          if (changeEvent.isChanged("timeout")) {
          System.out.println(config.getIntProperty("timeout", 0));
          }
          }
        2. 測試
          在Apollo服務(wù)端修改timeout配置的值為300,發(fā)布后,控制臺打印300


        2.2.2.3 @ApolloJsonValue的使用


        1. 新增User如下:

        1. /**
          * 用戶
          *
          * @author simon
          * @create 2018-11-02 16:41
          **/
          public class User {
          private String username;
          private String password;

          public String getUsername() {
          return username;
          }

          public void setUsername(String username) {
          this.username = username;
          }

          public String getPassword() {
          return password;
          }

          public void setPassword(String password) {
          this.password = password;
          }
          }
        2. 服務(wù)端新增配置

          jsonBeanProperty=[ { "username": "john", "password": "1234" }, { "username": "simon", "password": "222132" } ]
        3. 客戶端獲取配置


          //4. @ApolloJsonValue使用
          @ApolloJsonValue("${jsonBeanProperty:[]}")
          private List<User> anotherJsonBeans;

          @RequestMapping("/index4")
          public void hello4(){
          anotherJsonBeans.forEach(item -> {
          System.err.println(item.getUsername()+"--"+item.getPassword());
          });
          }
        4. 測試
          瀏覽器訪問http://127.0.0.1:8080/index4,正確打印配置的值


        源碼下載

        https://github.com/simondongji/SpringCloudProject/tree/master/apollo

        本網(wǎng)站內(nèi)容僅代表作者本人的觀點,不代表本網(wǎng)站的觀點和看法,與本網(wǎng)站立場無關(guān),如有侵權(quán)請聯(lián)系討教。
        給作者打賞,鼓勵TA抓緊創(chuàng)作
        0人打賞金額
        JAVA葵花寶典
        16篇 作品
        2102 總閱讀量
        評論
        您可能感興趣的文章

        項目管理服務(wù)模式

        敏捷項目管理與傳統(tǒng)項目管理比較

        項目管理的特點

        PMO是什么?是管項目經(jīng)理的嘛?

        項目經(jīng)理必須關(guān)注的開會十大關(guān)鍵問題!

        項目的組成要素

        熱門話題 更多話題
        精益生產(chǎn) 質(zhì)量管理 智能制造
        職場效率 項目管理 討教
        AI 大數(shù)據(jù) 六西格瑪
        ×

        給作者打賞,鼓勵TA抓緊創(chuàng)作!

        選擇支付方式
        選擇打賞金額
        注:打賞的收益歸作者,非平臺

        微信掃描支付

        打賞金額: 1元

        ×

        給作者打賞,鼓勵TA抓緊創(chuàng)作!

        您的討教幣
        填寫您打賞討教幣數(shù)量
        輸入密碼

        111

        注:打賞的收益歸作者,非平臺

        微信掃描支付

        打賞金額: 1元

        国产第一亚洲_浪货一天不做就难受呀_欧洲视频在线观看_亚洲精品一区二区三区美女

              9000px;">

                    中文字幕av资源一区| 亚洲成人在线观看视频| 久久精品国产久精国产| 亚洲日本中文字幕区| 欧美精品一区二区久久婷婷| 99久精品国产| 伦理电影国产精品| 亚洲综合成人在线| 国产精品国产三级国产普通话三级 | 91欧美一区二区| 秋霞电影一区二区| 亚洲精品日韩专区silk| 久久久国产一区二区三区四区小说| 欧美精品视频www在线观看| 91免费精品国自产拍在线不卡| 国产91丝袜在线播放0| 国产精品资源在线观看| 青青国产91久久久久久| 日韩电影免费在线观看网站| 亚洲乱码国产乱码精品精可以看| 国产精品电影院| 亚洲成人三级小说| 日本va欧美va精品发布| 国产麻豆视频一区| 亚洲mv在线观看| 中文av一区二区| 国产精品国产三级国产有无不卡| 欧美久久久久久久久中文字幕| 国产女人水真多18毛片18精品视频| 激情文学综合网| 国产亚洲一区二区在线观看| 99久久综合99久久综合网站| 日韩理论在线观看| 欧美浪妇xxxx高跟鞋交| 日本道免费精品一区二区三区| 天天爽夜夜爽夜夜爽精品视频| 国产剧情一区二区| 精品噜噜噜噜久久久久久久久试看| 久久av资源站| 色诱视频网站一区| 成人午夜看片网址| 亚洲国产精品ⅴa在线观看| 国产精品综合一区二区| 亚洲一区二区视频在线| 欧美日韩精品一区二区三区蜜桃| 99国产欧美另类久久久精品| 国产999精品久久久久久绿帽| 亚洲伦理在线免费看| 亚洲国产高清不卡| 精品女同一区二区| 老鸭窝一区二区久久精品| 日本中文字幕一区| 国产精品一区二区x88av| 7777精品伊人久久久大香线蕉 | 国产一区二区在线电影| 国产精品久久久久影视| 91久久久免费一区二区| 蜜臀精品一区二区三区在线观看| 久久综合狠狠综合| 99麻豆久久久国产精品免费优播| 亚洲成人精品一区二区| 久久老女人爱爱| 欧美日韩国产在线观看| 成人av电影在线| 懂色av一区二区三区免费观看| 成人免费视频app| 色婷婷综合久久久久中文一区二区| 综合久久国产九一剧情麻豆| 国产精品美女www爽爽爽| 7777精品伊人久久久大香线蕉超级流畅 | 中文字幕高清不卡| 中文字幕一区二区三区在线播放 | caoporen国产精品视频| 青青草原综合久久大伊人精品| 亚洲色大成网站www久久九九| 久久久久久久久蜜桃| 国产精品久久久久久久久图文区| 日韩高清中文字幕一区| 99久久精品国产一区二区三区| 国内外成人在线| 日韩精品一区二区三区四区| 精品在线播放免费| 日韩一区二区三区视频| 日韩欧美电影在线| 欧洲国内综合视频| 九九精品视频在线看| 一区二区三区久久久| 伊人婷婷欧美激情| 亚洲国产一区二区三区| 亚洲欧美激情小说另类| 亚洲国产精品ⅴa在线观看| 在线观看日韩毛片| 欧美日韩综合在线免费观看| 欧美视频在线观看一区| 欧美亚洲国产一卡| 日韩一区二区三区精品视频| 日韩欧美国产不卡| 久久九九国产精品| 国产精品福利一区二区三区| 亚洲日本韩国一区| 免费观看日韩av| 国产原创一区二区三区| 99热这里都是精品| 4hu四虎永久在线影院成人| 日韩欧美一二三区| 亚洲欧美日韩一区二区| 亚洲一区免费视频| 国产乱码精品一区二区三区忘忧草| 高清久久久久久| 日韩亚洲欧美中文三级| 亚洲美腿欧美偷拍| 国产美女精品一区二区三区| 欧美色男人天堂| 最新热久久免费视频| 国产乱对白刺激视频不卡| 欧美日韩一二三区| 亚洲码国产岛国毛片在线| 国产精品影视在线| 日韩午夜激情免费电影| 亚洲精品ww久久久久久p站| 成人午夜av影视| 欧美精品一区二区在线观看| 一区二区三区免费| 欧美在线视频全部完| 亚洲免费在线播放| 欧美日韩精品免费| 亚洲制服丝袜av| 色综合色综合色综合色综合色综合 | 日本韩国一区二区三区视频| 欧美极品aⅴ影院| 免费在线视频一区| 日韩视频一区二区三区| 日韩成人伦理电影在线观看| 欧美午夜理伦三级在线观看| 国产精品久久福利| 99国产欧美另类久久久精品 | 欧美国产成人精品| 国产高清在线精品| 中文字幕一区二区日韩精品绯色| 波多野结衣中文字幕一区二区三区| 久久久噜噜噜久久人人看 | 国产黄色精品视频| 精品久久久久久久久久久久包黑料 | 欧美做爰猛烈大尺度电影无法无天| 国产一区二区主播在线| 自拍偷拍亚洲欧美日韩| 高清免费成人av| 首页亚洲欧美制服丝腿| 久久久一区二区三区捆绑**| 国产福利一区二区三区在线视频| 亚洲欧美日韩国产成人精品影院| 91精品国产色综合久久ai换脸| 国产成人综合网| 精品一区二区三区日韩| 亚洲日本一区二区| 久久久久久一二三区| 欧美伊人久久久久久午夜久久久久| 九九在线精品视频| 日韩av网站在线观看| 亚洲人精品一区| 国产亚洲午夜高清国产拍精品| 日韩精品一区二区三区四区视频| 欧美精品亚洲一区二区在线播放| 成人毛片在线观看| 成人网在线播放| 成人app在线| 粉嫩在线一区二区三区视频| 久久99精品久久久久婷婷| 专区另类欧美日韩| 亚洲天堂成人网| 亚洲色图色小说| 亚洲天堂久久久久久久| 一区二区三区四区高清精品免费观看| 国产精品成人一区二区三区夜夜夜 | 日韩精品中午字幕| 精品国产欧美一区二区| 久久久久国产精品麻豆| 久久久久久久久久久99999| 精品日韩欧美在线| 国产视频在线观看一区二区三区| 欧美三日本三级三级在线播放| 91在线视频在线| 91麻豆国产福利精品| 日韩欧美高清dvd碟片| 中文字幕一区二区三区视频| 亚洲欧美日韩人成在线播放| 亚洲一区二区三区四区不卡| 另类小说一区二区三区| 日本三级韩国三级欧美三级| av福利精品导航| 欧美日韩国产123区| 国产日韩av一区二区| 一区二区三区中文在线观看| 日韩av网站免费在线| 91黄色免费观看| 亚洲人成影院在线观看| 国产成人精品一区二区三区四区| 在线不卡a资源高清| 天天影视网天天综合色在线播放 | 国产亚洲女人久久久久毛片|
                  1. <s id="6sogc"><tbody id="6sogc"></tbody></s>
                      • <bdo id="6sogc"></bdo>
                        <del id="6sogc"></del>
                        • <abbr id="6sogc"><code id="6sogc"></code></abbr>