ibcadmin 发表于 2019-10-24 09:51:06

Spring Cloud Alibaba(二) 配置中心多项目、多配置文件、分目录实现

<h2 id="先容">先容</h2>
<p>之前Spring Cloud Config基础篇这篇文章先容了Spring Cloud Config 设置中心基础的实现,本日继续聊下Spring Cloud Config 并联合nacos做服务注册中心,实现多项目、多设置文件、按项目目录分别等功能的设置服务中心。</p>
<p>阅读本篇文章之前,最好要有nacos基础;关于nacos是什么,如何使用,可以参考我的上一篇文章 Spring Cloud Alibaba(一) 如何使用nacos服务注册和发现,大概直接链接到官网教程Nacos 快速开始</p>
<h2 id="本示例紧张内容">本示例紧张内容</h2>
<ul>
<li>采用nacos做服务注册中心,Spring Cloud Config做设置服务中心,在上一篇基础上新建了ali-nacos-config-server设置服务中心项目、ali-nacos-config-client设置客户端项目、并把ali-nacos-consumer-feign设置也调整成从设置中心加载设置</li>
<li>支持多项目,config-repo设置文件目录按项目名称来规划,在设置中心 searchPaths: /cloud-alibaba/config-repo/{application}/ 使用application自动辨认查找目录</li>
<li>支持单项目多设置文件,ali-nacos-config-client项目的设置文件 spring.cloud.config.name=${spring.application.name},myconfig,通过指定多个name实现多设置文件</li>
</ul>
<h2 id="实现示例过程">实现示例过程</h2>
<h3 id="新建ali-nacos-config-server项目">新建ali-nacos-config-server项目</h3>
<p>该项目用来做设置服务中心,以下贴出关键部分代码</p>
<p>pom.xml</p>
<code>    <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></code>
<p>application.yml</p>
<code>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</code>
<p>启动类AnConfigServerApplication.java</p>
<code>@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class AnConfigServerApplication {
    public static void main(String[] args) {
      SpringApplication.run(AnConfigServerApplication.class, args);
    }
}</code>
<h3 id="新建ali-nacos-config-client项目">新建ali-nacos-config-client项目</h3>
<p>该项目用来做设置中心客户端测试之一,以下贴出几处关键代码</p>
<p>pom.xml</p>
<code>    <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></code>
<p>bootstrap.yml</p>
<code>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)</code>
<p>写个设置读取测试类HelloController.java</p>
<code>@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;
    }
}</code>
<p>启动类AnConfigClientApplication.java</p>
<code>@SpringBootApplication
@EnableDiscoveryClient
public class AnConfigClientApplication {
    public static void main(String[] args) {
      SpringApplication.run(AnConfigClientApplication.class, args);
    }
}</code>
<h3 id="调整ali-nacos-consumer-feign项目">调整ali-nacos-consumer-feign项目</h3>
<p>以下贴出调整部分代码</p>
<p>pom.xml增加spring-cloud-starter-config依赖</p>
<code>    <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></code>
<p>yml设置文件增加bootstrap.yml,把核心设置移到该设置文件<br />
bootstrap.yml</p>
<code>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)</code>
<p>编写设置读写测试类HomeController.java</p>
<code>@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;
    }
}</code>
<h3 id="末了放上设置文件目录规划">末了放上设置文件目录规划</h3>
<p>config-repo设置总目录<br />
ali-nacos-config-server 项目GIT的设置目录<br />
ali-nacos-consumer-feign 项目GIT的设置目录</p>
<h2 id="使用示例">使用示例</h2>
<h3 id="在上一篇基础上我们新建了2个项目并调整ali-nacos-consumer-feign项目使它支持设置长途读取有以下三个项目做测试">在上一篇基础上,我们新建了2个项目,并调整ali-nacos-consumer-feign项目使它支持设置长途读取,有以下三个项目做测试。</h3>
<p>ali-nacos-config-server:设置服务中心,服务名:ali-nacos-config-server,端口:8001<br />
ali-nacos-config-client:设置客户端1(斲丧端),服务名:ali-nacos-config-client,端口:8002<br />
ali-nacos-consumer-feign:设置客户端2(斲丧端),服务名:ali-nacos-consumer-feign,端口:9101</p>
<h3 id="运行测试">运行测试</h3>
<p>起首要启动服务注册中心 nacos</p>
<h4 id="启动ali-nacos-config-server服务设置服务中心测试">启动ali-nacos-config-server服务,设置服务中心测试</h4>
<ul>
<li>访问:http://localhost:8001/ali-nacos-config-client/dev ,返回:</li>
</ul>
<code>{
    name: "ali-nacos-config-client",
    profiles: [
    "dev"
    ],
    label: null,
    version: "5456d7ca31d46e91464b6efd3a0831a8208413d9",
    state: null,
    propertySources: [ ]
}</code>
<ul>
<li>访问:http://localhost:8001/ali-nacos-config-client/test ,返回:</li>
</ul>
<code>{
    name: "ali-nacos-config-client",
    profiles: [
    "test"
    ],
    label: null,
    version: "5456d7ca31d46e91464b6efd3a0831a8208413d9",
    state: null,
    propertySources: [ ]
}</code>
<p>这表示设置能正确从git上加载到了。</p>
<h4 id="启动ali-nacos-config-client服务运行客户端测试1">启动ali-nacos-config-client服务,运行客户端测试1</h4>
<ul>
<li>bootstrap.yml的active调成dev,访问:http://localhost:8002/hello ,返回:</li>
</ul>
<code>{
    hello: "ali-nacos-config-client 项目的 dev config",
    myconfig: "ali-nacos-config-client 项目的 myconfig config"
}</code>
<ul>
<li>bootstrap.yml的active调成test,访问:http://localhost:8002/hello ,返回:</li>
</ul>
<code>{
hello: "ali-nacos-config-client 项目的 test config",
myconfig: "ali-nacos-config-client 项目的 myconfig config"
}</code>
<p>表示我git上该项目的2个设置文件都成功读取到了。</p>
<h4 id="启动ali-nacos-consumer-feign项目测试客户端测试2">启动ali-nacos-consumer-feign项目,测试客户端测试2</h4>
<p>访问:http://localhost:9101/hello</p>
<p>返回结果</p>
<code>{
hello: "ali-nacos-consumer-feign 项目的 dev config"
}</code>
<p>表示该项目的设置文件加载成功了</p>
<h2 id="资料">资料</h2>
<ul>
<li>Spring Cloud Alibaba 示例源码</li>
<li>原文地址</li>
</ul><br><br/><br/><br/><br/><br/>来源:<a href="https://www.cnblogs.com/tqlin/p/11725487.html" target="_blank">https://www.cnblogs.com/tqlin/p/11725487.html</a>

lesliehuang 发表于 2020-11-2 23:45:44

[幸运时时彩]https://1680380.com/view/shishicai_xy/ssc_index.html[十一运夺金]https://1680380.com/view/shiyix5_sd/index.html[天津时时彩]https://1680380.com/view/shishicai_tj/ssc_index.html
页: [1]
查看完整版本: Spring Cloud Alibaba(二) 配置中心多项目、多配置文件、分目录实现