专栏首页张泽旭的专栏SpringCloud Config 配置中心数据库不限制存储后端解决方案

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • hadoop集群安装

    分布式安装 修改IP地址和主机名(主机名可以不用修改) hadoop1.com 192.168.213.146 192.168.213.255 255.255....

    张泽旭
  • openstack i版搭建教程

    云计算(cloud computing)是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。云是网络、互联网的...

    张泽旭
  • android下拉五级菜单联动

    本人是一个不擅长Android的开发的,但是这几天在做联通的一个服务器配件管理系统,做完B/S的又要写C/S的,老板要求没办法。在做的过程中遇到了一个下拉菜单联...

    张泽旭
  • SpringBoot参数传递

    RequiredStringparameter'name'isnotpresent :name参数没有提供

    DataScience
  • Java 枚举类 详解

    1、枚举是什么?   Java中的枚举其实是一种语法糖,在 JDK 1.5之后出现,用来表示固定且有限个的对象。比如一个季节类有春、夏、秋、冬四个对象;一个星期...

    IT可乐
  • Java Web基础入门

    前言 语言都是相通的,只要搞清楚概念后就可以编写代码了。而概念是需要学习成本的。 Java基础 不用看《编程思想》,基础语法看 http://www.runo...

    Ryan-Miao
  • Springboot读取配置文件、pom文件及自定义配置文件

    前言 很多人都知道读取配置文件,这是初级做法,上升一点难度是使用java bean的方式读取自定义配置文件,但是大家很少有知道读取pom文件信息,接下来我都会讲...

    胖虎
  • springMVC系列(八)——springMVC参数接收详解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    逝兮诚
  • 重学 Java 设计模式:实战中介者模式「按照Mybaits原理手写ORM框架,给JDBC方式操作数据库增加中介者场景」

    同样的幼儿园、同样的小学、一样的书本、一样的课堂,有人学习好、有人学习差。不只是上学,几乎人生处处都是赛道,发令枪响起的时刻,也就把人生的差距拉开。编程开发这条...

    小傅哥
  • oracle表之间的关联

    微醺

扫码关注云+社区

领取腾讯云代金券