前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud Config 配置中心数据库不限制存储后端解决方案

SpringCloud Config 配置中心数据库不限制存储后端解决方案

作者头像
张泽旭
发布2018-12-10 16:46:47
8380
发布2018-12-10 16:46:47
举报
文章被收录于专栏:张泽旭的专栏

一、问题引出

       今天公司让做一个配置中心,可以在redis上作为SpringCloud 配置中心后端,本人是springcloud的菜鸟,但是很懵逼,但还是硬着头皮接下了。翻看官方文档发现,居然只有三种配置中心后端。我那个难受哈,百度了百度发现只有数据库后端可以使,而且还要换springCloud版本,还要写死数据库查询语句,就感觉对我来说没希望了。但是,对微服务的理解还是有的,通信通过httpClient,可以知道,它还是通过访问url获取数据来完成配置的,数据还是json得数据格式。开始追踪问题了。

二、问题追踪

开始寻找解决方案,采用本地配置的文件,然后修改数据库,修改本地配置文件,进一步来达到修改配置的目的,麻烦不,哈哈,我也感觉很麻烦,但是没办法,硬着头皮试试。

配置中心主函数

代码语言:javascript
复制
@EnableConfigServer
@SpringBootApplication
public class TestServerApplication {
	public static void main(String[] args) {
		SpringApplication.run(TestServerApplication.class, args);
	}
}

配置中心配置文件

代码语言:javascript
复制
server:
  port: 7777
spring:
  application:
    name: config-server
  profiles:
    active: native

客户端主函数

代码语言:javascript
复制
@SpringBootApplication
public class TestClientApplication {
	public static void main(String[] args) {
		SpringApplication.run(TestClientApplication.class, args);
	}
}

测试的数据访问接口

代码语言:javascript
复制
@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;
    }
}

配置文件

代码语言:javascript
复制
spring:
  application:
    name: service-gatway
  cloud:
    config:
      discovery:
        enabled: true
        service-id: config-server
      profile: dev

好了,上面的服务和配置都写完成了,中间省略了很多分析过程,直接看找出问题的关键所在

记住一点,如果配置文件读取失败的话,上面的注入是要去掉的,不然项目启动不起来,我们这样是启动不了 的,要把客户端上的字段注入部分要删掉。

启动看日志后会发现,客户端实际上是访问了上面的URL来获取配置的,端口是8888,而我们配置中心的端口是7777,所以访问不了。后来我灵机一动,在配置中心上实现了一个Controller,模拟这个链接返回了请求所要的配置数据。配置中心其他不变增加代码如下:

代码语言:javascript
复制
@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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年08月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、问题引出
  • 二、问题追踪
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档