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

{
hello: "ali-nacos-config-client 项目的 dev config",
myconfig: "ali-nacos-config-client 项目的 myconfig config"
}
{
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(二) 配置中心多项目、多配置文件、分目录实现的更多相关文章

  1. Spring Cloud Alibaba(2)---RestTemplate微服务项目

    RestTemplate微服务项目 前言 因为要运用 Spring Cloud Alibaba 开源组件到分布式项目中,所以这里先搭建一个不通过 Spring Cloud只通过 RestTemplat ...

  2. Spring Cloud Alibaba nacos 配置中心使用

    背景 上一文我们讲到了如何去搭建注册中心,这一次我们讲述如何使用nacos作为注册中心 spring-cloud-alibaba-basis 创建基础依赖 首先我们创建一个spring-cloud-a ...

  3. Spring Cloud Alibaba(5)---Nacos(配置中心)

    Nacos(配置中心) 有关Spring Cloud Alibaba之前写过四篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring C ...

  4. Spring Cloud Alibaba(4)---Nacos(注册中心)

    Nacos(注册中心) 有关Spring Cloud Alibaba之前写过三篇文章. Spring Cloud Alibaba(1)---入门篇 Spring Cloud Alibaba(2)--- ...

  5. Spring Cloud Alibaba(8)---Feign服务调用

    Feign服务调用 有关Spring Cloud Alibaba之前写过五篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring Clo ...

  6. 详细剖析Spring Cloud 和Spring Cloud Alibaba的前世今生

    我们知道spring cloud可以用来开发微服务,但是应该很少有人真正知道Spring Cloud是什么. 官方的解释是:spring cloud提供了一些可以让开发者快速构建分布式应用的工具,这些 ...

  7. Spring Cloud Alibaba系列(二)nacos作为服务配置中心

    Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持.使用 Spring Cloud Alibaba Nacos Config,您可 ...

  8. Spring Cloud Alibaba 初体验(一) Nacos 配置中心

    一.Nacos 下载与初始化配置 本文使用1.2.0,下载地址:https://github.com/alibaba/nacos/releases Nacos 单机模式支持持久化配置到 MySQL 数 ...

  9. Spring Cloud Alibaba基础教程-Nacos(二)

    在Spring Cloud Alibaba基础教程-Nacos(一)当中学习了,如何从 nacos当中 通过Java的方式获取值,以及连接数据库,下面我们开始第二篇的学习 ,如果对你有帮助,方便下次寻 ...

随机推荐

  1. 新建servlet工程

    1.选择新建Dynamic  Web Project 2.选择服务器和版本(2.5) 3.src目录下新建一个包 4.包里面新建一个类 5.实现Servlet接口(通过http协议访问) 6.serv ...

  2. Linux 笔记 - 特殊权限

    博客地址:http://www.moonxy.com 一.前言 Linux 中使用权限的时候,一般都是使用 3 位数,比如,777.755.666.644 等,其实在最前面还有一位,那就是特殊权限,也 ...

  3. 月光宝盒之时间魔法--java时间的前生今世

    月光宝盒花絮 “曾经有一份真诚的爱情摆在我的面前,但是我没有珍惜,等到了失去的时候才后悔莫及,尘世间最痛苦的事莫过于此.如果可以给我一个机会再来一次的话,我会跟那个女孩子说我爱她,如果非要把这份爱加上 ...

  4. 给idea设置默认使用的JDK

    一,前言 在文章给idea设置默认使用的maven配置中我给我的idea设置了默认使用的maven,并且在setting.xml文件中,设置了本地的maven仓库,这样就不会使用maven默认在C盘的 ...

  5. jmeter入门(环境搭建&运行&初识)

    最近了解了一些性能测试的基础知识和原理决定动手实践下,比较选择了jmeter 一.什么是jmeter Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试 ...

  6. Python连载40-协程定义及状态、send语句、yield用法

    一.协程 1.历史进程: (1)3.4引入协程,用yield来实现 (2)3.5引入协程语法 (3)实现协程比较好的包有asyncio,tornado,gevent 2.定义:协程是为非抢占式多任务产 ...

  7. python 课后习题 猜数游戏

    4.1 猜数游戏.在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜数字,如果大于预设的数,显示“遗憾,太大了”:如果小于预设的数,显示“遗憾,太小了”:如此循环,直至猜到该数,显示“预测N次, ...

  8. Spring框架学习笔记(3)——SpringMVC框架

    SpringMVC框架是基于Spring框架,可以让我们更为方便的进行Web的开发,实现前后端分离 思路和原理 我们之前仿照SpringMVC定义了一个自定义MVC框架,两者的思路其实都是一样的. 建 ...

  9. Spring 梳理 - @Autowired VS @Resource

    Autowired @Autowired顾名思义,就是自动装配,其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property.当然,getter看个人需求,如果私 ...

  10. mysql having和using使用

    1.having当用到聚合函数sum,count后,又需要筛选条件时,就可以考虑使用having,因为where是在聚合前筛选记录的,无法和统计函数一起使用,而having在聚合后筛选记录,可以和统计 ...