SpringCloud Config 配置中心數據庫不限制存儲後端解決方案

一、問題引出

       今天公司讓做一個配置中心,可以在redis上作爲SpringCloud 配置中心後端,本人是springcloud的菜鳥,但是很懵逼,但還是硬着頭皮接下了。翻看官方文檔發現,居然只有三種配置中心後端。我那個難受哈,百度了百度發現只有數據庫後端可以使,而且還要換springCloud版本,還要寫死數據庫查詢語句,就感覺對我來說沒希望了。但是,對微服務的理解還是有的,通信通過httpClient,可以知道,它還是通過訪問url獲取數據來完成配置的,數據還是json得數據格式。開始追蹤問題了。

二、問題追蹤

開始尋找解決方案,採用本地配置的文件,然後修改數據庫,修改本地配置文件,進一步來達到修改配置的目的,麻煩不,哈哈,我也感覺很麻煩,但是沒辦法,硬着頭皮試試。

配置中心主函數

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

配置中心配置文件

server:
  port: 7777
spring:
  application:
    name: config-server
  profiles:
    active: native

客戶端主函數

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

測試的數據訪問接口

@RefreshScope
@RestController
public class TestController {
    @Value("${name}")
    private String name;
    @Value("${name.id}")
    private String id;


    @ResponseBody
    @RequestMapping(value="/from",method= RequestMethod.GET)
    public JSONObject query( ) throws Exception{
        JSONObject rest = new JSONObject();
        rest.put("from",name);
        rest.put("name","didispace");
        rest.put("id",id);
        return rest;
    }
}

配置文件

spring:
  application:
    name: service-gatway
  cloud:
    config:
      discovery:
        enabled: true
        service-id: config-server
      profile: dev

好了,上面的服務和配置都寫完成了,中間省略了很多分析過程,直接看找出問題的關鍵所在

記住一點,如果配置文件讀取失敗的話,上面的注入是要去掉的,不然項目啓動不起來,我們這樣是啓動不了 的,要把客戶端上的字段注入部分要刪掉。

啓動看日誌後會發現,客戶端實際上是訪問了上面的URL來獲取配置的,端口是8888,而我們配置中心的端口是7777,所以訪問不了。後來我靈機一動,在配置中心上實現了一個Controller,模擬這個鏈接返回了請求所要的配置數據。配置中心其他不變增加代碼如下:

@RestController
public class TestController {
    @ResponseBody
    @RequestMapping(value="{application}/{dev}",method= RequestMethod.GET)
    public String query(@PathVariable (value = "application") String application,@PathVariable (value = "dev") String dev) throws Exception{
        if(application.equals("service-gatway1")){
            String str ="{\"name\":\"service\",\"profiles\":[\"dev\"],\"label\":null,\"version\":null,\"state\":null,\"propertySources\":[{\"name\":\"dey.yml\",\"source\":{\"server.port\":7003,\"name\":123,\"name.id\":\"123\"}}]}";
            return str;
        }else{

            String str ="{\"name\":\"service\",\"profiles\":[\"dev\"],\"label\":null,\"version\":null,\"state\":null,\"propertySources\":[{\"name\":\"dey.yml\",\"source\":{\"server.port\":7002,\"name\":123,\"name.id\":\"123\"}}]}";
            return str;
        }


    }
}

我給他返回一個符合格式的json數據看看會怎麼樣,(注:上述數據格式,是在測試正確的情況下,訪問上面http://localhost:8888/service-gatway/dev鏈接得到的),將配置中心端口號改成8888,再繼續訪問。

配置中心的鏈接可以訪問了,我們改回客戶端代碼,注入name  和  name.id,啓動客戶端

這時你會發現客戶端起來了,而且端口號也發生了改變,變成咋們配置的7002端口了

訪問客戶端url,數據返回的是我們所需要的

有了這個,大家感覺是不是什麼後端都可以用了,想怎麼配置就怎麼配置,是不是很爽哈。。。

有什麼不對的歡迎大家指正和留言

項目碼雲地址 https://gitee.com/zhangzexu/SpringCloud.git

我的博客即將同步至騰訊雲+社區,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=1r0a380nbe7fv

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章