Spring Cloud Alibaba(二) 配置中心多项目、多配置文件、分目录实现
Spring Cloud Alibaba(二) 配置中心多项目、多配置文件、分目录实现
介绍
之前Spring Cloud Config基础篇这篇文章介绍了Spring Cloud Config 配置中心基础的实现,今天继续聊下Spring Cloud Config 并结合nacos做服务注册中心,实现多项目、多配置文件、按项目目录划分等功能的配置服务中心。
阅读本篇文章之前,最好要有nacos基础;关于nacos是什么,如何使用,可以参考我的上一篇文章 Spring Cloud Alibaba(一) 如何使用nacos服务注册和发现,或者直接链接到官网教程Nacos 快速开始
本示例主要内容
- 采用nacos做服务注册中心,Spring Cloud Config做配置服务中心,在上一篇基础上新建了ali-nacos-config-server配置服务中心项目、ali-nacos-config-client配置客户端项目、并把ali-nacos-consumer-feign配置也调整成从配置中心加载配置
- 支持多项目,config-repo配置文件目录按项目名称来规划,在配置中心 searchPaths: /cloud-alibaba/config-repo/{application}/ 使用application自动识别查找目录
- 支持单项目多配置文件,ali-nacos-config-client项目的配置文件 spring.cloud.config.name=${spring.application.name},myconfig,通过指定多个name实现多配置文件
实现示例过程
新建ali-nacos-config-server项目
该项目用来做配置服务中心,以下贴出关键部分代码
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
application.yml
server:
port: 8001
spring:
application:
name: ali-nacos-config-server
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server:
git:
#uri: https://github.com/smltq/spring-boot-demo.git
uri: https://gitee.com/tqlin/spring-boot-demo.git
searchPaths: /cloud-alibaba/config-repo/{application}/
force-pull: true
启动类AnConfigServerApplication.java
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class AnConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(AnConfigServerApplication.class, args);
}
}
新建ali-nacos-config-client项目
该项目用来做配置中心客户端测试之一,以下贴出几处关键代码
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
</dependencies>
bootstrap.yml
spring:
application:
name: ali-nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
name: ${spring.application.name},myconfig
uri: http://localhost:8001/ # config server 配置服务地址
profile: ${spring.profiles.active}
label: master
profiles:
active: pro # 配置文件版本(该示例分为test,dev,pro)
写个配置读取测试类HelloController.java
@RestController
public class HelloController {
@Value("${easy.hello}")
private String hello;
@Value("${easy.myconfig}")
private String myconfig;
@RequestMapping("/hello")
public Map hello() {
Map map = new HashMap<>();
map.put("hello", hello);
map.put("myconfig", myconfig);
return map;
}
}
启动类AnConfigClientApplication.java
@SpringBootApplication
@EnableDiscoveryClient
public class AnConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(AnConfigClientApplication.class, args);
}
}
调整ali-nacos-consumer-feign项目
以下贴出调整部分代码
pom.xml增加spring-cloud-starter-config依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
yml配置文件增加bootstrap.yml,把核心配置移到该配置文件
bootstrap.yml
spring:
application:
name: ali-nacos-consumer-feign
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
name: ${spring.application.name}
uri: http://localhost:8001/ # config server 配置服务地址
profile: ${spring.profiles.active}
label: master
profiles:
active: dev # 配置文件版本(该示例分为test,dev,pro)
编写配置读写测试类HomeController.java
@RestController
@Slf4j
public class HomeController {
@Autowired
private HelloService helloService;
@Value("${easy.hello}")
private String hello;
@GetMapping(value = "/", produces = "application/json")
public String home() {
log.info("-----------------consumer调用开始-----------------");
String param = "云天";
log.info("消费者传递参数:" + param);
String result = helloService.hello(param);
log.info("收到提供者响应:" + result);
return "feign消费者" + result;
}
@RequestMapping("/hello")
public Map hello() {
Map map = new HashMap<>();
map.put("hello", hello);
return map;
}
}
最后放上配置文件目录规划
使用示例
在上一篇基础上,我们新建了2个项目,并调整ali-nacos-consumer-feign项目使它支持配置远程读取,有以下三个项目做测试。
ali-nacos-config-server:配置服务中心,服务名:ali-nacos-config-server,端口:8001
ali-nacos-config-client:配置客户端1(消费端),服务名:ali-nacos-config-client,端口:8002
ali-nacos-consumer-feign:配置客户端2(消费端),服务名:ali-nacos-consumer-feign,端口:9101
运行测试
首先要启动服务注册中心 nacos
启动ali-nacos-config-server服务,配置服务中心测试
{
name: "ali-nacos-config-client",
profiles: [
"dev"
],
label: null,
version: "5456d7ca31d46e91464b6efd3a0831a8208413d9",
state: null,
propertySources: [ ]
}
{
name: "ali-nacos-config-client",
profiles: [
"test"
],
label: null,
version: "5456d7ca31d46e91464b6efd3a0831a8208413d9",
state: null,
propertySources: [ ]
}
这表示配置能正确从git上加载到了。
启动ali-nacos-config-client服务,运行客户端测试1
- bootstrap.yml的active调成dev,访问:http://localhost:8002/hello ,返回:
{
hello: "ali-nacos-config-client 项目的 dev config",
myconfig: "ali-nacos-config-client 项目的 myconfig config"
}
- bootstrap.yml的active调成test,访问:http://localhost:8002/hello ,返回:
{
hello: "ali-nacos-config-client 项目的 test config",
myconfig: "ali-nacos-config-client 项目的 myconfig config"
}
表示我git上该项目的2个配置文件都成功读取到了。
启动ali-nacos-consumer-feign项目,测试客户端测试2
访问:http://localhost:9101/hello
返回结果
{
hello: "ali-nacos-consumer-feign 项目的 dev config"
}
表示该项目的配置文件加载成功了
资料
Spring Cloud Alibaba(二) 配置中心多项目、多配置文件、分目录实现的更多相关文章
- Spring Cloud Alibaba(2)---RestTemplate微服务项目
RestTemplate微服务项目 前言 因为要运用 Spring Cloud Alibaba 开源组件到分布式项目中,所以这里先搭建一个不通过 Spring Cloud只通过 RestTemplat ...
- Spring Cloud Alibaba nacos 配置中心使用
背景 上一文我们讲到了如何去搭建注册中心,这一次我们讲述如何使用nacos作为注册中心 spring-cloud-alibaba-basis 创建基础依赖 首先我们创建一个spring-cloud-a ...
- Spring Cloud Alibaba(5)---Nacos(配置中心)
Nacos(配置中心) 有关Spring Cloud Alibaba之前写过四篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring C ...
- Spring Cloud Alibaba(4)---Nacos(注册中心)
Nacos(注册中心) 有关Spring Cloud Alibaba之前写过三篇文章. Spring Cloud Alibaba(1)---入门篇 Spring Cloud Alibaba(2)--- ...
- Spring Cloud Alibaba(8)---Feign服务调用
Feign服务调用 有关Spring Cloud Alibaba之前写过五篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring Clo ...
- 详细剖析Spring Cloud 和Spring Cloud Alibaba的前世今生
我们知道spring cloud可以用来开发微服务,但是应该很少有人真正知道Spring Cloud是什么. 官方的解释是:spring cloud提供了一些可以让开发者快速构建分布式应用的工具,这些 ...
- Spring Cloud Alibaba系列(二)nacos作为服务配置中心
Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持.使用 Spring Cloud Alibaba Nacos Config,您可 ...
- Spring Cloud Alibaba 初体验(一) Nacos 配置中心
一.Nacos 下载与初始化配置 本文使用1.2.0,下载地址:https://github.com/alibaba/nacos/releases Nacos 单机模式支持持久化配置到 MySQL 数 ...
- Spring Cloud Alibaba基础教程-Nacos(二)
在Spring Cloud Alibaba基础教程-Nacos(一)当中学习了,如何从 nacos当中 通过Java的方式获取值,以及连接数据库,下面我们开始第二篇的学习 ,如果对你有帮助,方便下次寻 ...
随机推荐
- vs code: 将VS code添加至右键
解决问题:一般安装完vs code后,系统可能不会将其添加至右键等菜单上,不便于开发. 解决方案: 百度上有一些相关问题的解决办法,但是还是会遇到一些问题,以下面为例: 1.新建一个reg后缀的文件 ...
- 读取用户输入并判断的bash脚本
#!/bin/bash echo -e "1) A"echo -e "2) B"echo -e "3) C"echo -e "4) ...
- web-文件上传漏洞总结
思维导图: 一,js验证绕过 1.我们直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可. 或者可以不加载所有js,还可以将html源码copy一份到本地,然后对相应代码进行 ...
- python中pyqt5的进度条--python实战(十)
python太博大精深了,使用场景非常多.最近笔者一直使用PyQt5编一些小程序,顺便就把一些常用的东西列出来,做个记录和积累吧.进度条是非常常用的东西,今天用的时候,顺便温习了一下,这个东西自己感觉 ...
- Pandas对缺失值的处理
Pandas使用这些函数处理缺失值: isnull和notnull:检测是否是空值,可用于df和series dropna:丢弃.删除缺失值 axis : 删除行还是列,{0 or 'index', ...
- Spring Data JPA 梳理 - JPA与“Spring、Spring Data JPA”的关系
JPA其实也就是java实体对象和关系型数据库建立起映射关系,通过面向对象编程的思想操作关系型数据库的规范. Spring 框架对 JPA 提供的支持主要体现在如下几个方面: 首先,它使得 JPA 配 ...
- 使用apache的poi来实现数据导出到excel的功能——方式二
此次,介绍利用poi与layui table结合导出excel.这次不需要从数据库中查询出来的数据进行每一行的拼接那么麻烦,我们这次将标题定义一个id值,对应从数据库中查找出来的字段名即可. 1.po ...
- 如何制作一个Nginx镜像
1,从这里你将学到编写Dockerfile的4个重要指令RUN,EXPOSE,ADD,ENTRYPOINT2,在Dockerfile中编写拷贝文件至容器的方法3, 安装一个nginx server,并 ...
- Jetpack系列:Paging组件帮你解决分页加载实现的痛苦
相信很多小伙伴们在项目实战中,经常会用到界面的分页显示.加载更多等功能.需要针对具体功能做针对性开发和调试,耗时耗力. Paging组件的使用将这部分的工作简化,从而让开发者更专注于业务的具体实现.下 ...
- 一道题考你对__autoreleasing和__block的理解
考虑下面的代码,有哪些问题,如何把他改成正确的形式? @interface TestObj : NSObject @end @implementation TestObj - (void)method ...