今天公司让做一个配置中心,可以在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