zoukankan      html  css  js  c++  java
  • 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

    {
        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"
    }
    

    表示该项目的配置文件加载成功了

    资料

  • 相关阅读:
    给出一个单向链表的头指针,输出该链表中倒数第K个节点的指针
    把二元查找树转变成排序的双向链表
    动态规划0/1背包问题
    判断一字符串是不是对称的
    动态链接库dll,静态链接库lib, 导入库lib(转载)
    基于格点数据分析和表达
    Silverlight Wcf 获取集合数据并绑定(DataContract,DataMember)
    让你学会使用WCF服务端配置
    数据契约(DataContract)
    symbol详解
  • 原文地址:https://www.cnblogs.com/tqlin/p/11725487.html
Copyright © 2011-2022 走看看