今天公司让做一个配置中心,可以在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
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句