【零开始学习SpringCloud Alibaba(二)】


本人也在学习阶段,如有错误请各位大神评论区指出,感谢!!!!

前言

根据【零开始学习SpringCloud Alibaba(一)】完成项目搭建

一、修改工程provider-service的pom.xml

添加spring-cloud-starter-alibaba-nacos-config依赖

		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

自动刷新依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

修改后的完整pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud-alibaba</artifactId>
        <groupId>cn.hrock</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>provider-service</artifactId>

    <dependencies>
        <!-- nacos发现服务 -->
        <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-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
</project>

二、新增bootstrap.yml

bootstrap.yml(bootstrap.properties)用来在程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等。

application.yml(application.properties) 应用程序特有配置信息,可用来配置后续各模块中需使用的公共参数等。

因为bootstrap.yml 先于 application.yml 加载,项目启动时需要,为了取得配置信息(本项目从nacos获取),你需要一些提早的引导配置。因此,把 nacos discovery 信息放在 bootstrap.yml,用来加载在这个时期真正需要的配置信息。

bootstrap.yml完整配置如下:

spring:
  application:
    name: service-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        instance-enabled: true
      username: nacos
      password: nacos

三、修改application.yml

删除nacos discovery 配置信息
开启actuator的全部端点

server:
  port: 18081

management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

四、创建用户信息的配置文件

这里@Getter与@Setter使用了lombok插件
可以在夫级工程的的pom.xml中添加依赖

	<dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

UserConfig.class

@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "user1")
public class UserConfig {

	private int age;

	private String name;
}

五、@Value注解与配置文件获取Nacos配置

在EchoController类中,我们注入UserConfig配置,以及使用@Value来获取配置,最后我们添加一个接口来返回用户信息,并添加 @RefreshScope 打开动态刷新功能

EchoController的完整内容如下:

@RestController
@RefreshScope
public class EchoController {

  //nacos的配置管理类
  @Autowired
  private NacosConfigManager nacosConfigManager;

  @Autowired
  private UserConfig userConfig;

  @Value("${user2.name:zz}")
  String userName;

  @Value("${user2.age:25}")
  Integer age;

  @GetMapping("/echo/{string}")
  public String echo(@PathVariable String string) {
    return "hello Nacos Discovery " + string;
  }

  @GetMapping("/divide")
  public String divide(@RequestParam Integer a, @RequestParam Integer b) {
    return String.valueOf(a / b);
  }

  @GetMapping("/sleep")
  public String sleep() {
    try {
      Thread.sleep(2000L);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    return "ok";
  }

  @RequestMapping("/user")
  public String simple() {
    return "Hello Nacos Config! \n"
        + "Hello user1:" + userConfig.getName() + " age:" + userConfig.getAge() + "\n"
        + "Hello user2:" + userName + " age:" + age + "\n"
        +  nacosConfigManager.getConfigService();
  }
}

六、监听nacos配置,即使更新配置

通过实现ApplicationRunner将监听事件添加至nacos的配置服务中

此处的service-provider需要与nacos后台中配置的Data ID相同
此处的DEFAULT_GROUP需要与nacos后台中配置的Group相同

完整代码如下:

@Component
class SampleRunner implements ApplicationRunner {

  @Autowired
  private NacosConfigManager nacosConfigManager;

  @Override
  public void run(ApplicationArguments args) throws Exception {
    nacosConfigManager.getConfigService()
        .addListener("service-provider", "DEFAULT_GROUP", new Listener() {

          /**
           * Callback with latest config data.
           * @param configInfo latest config data for specific dataId in Nacos
           * server
           */
          @Override
          public void receiveConfigInfo(String configInfo) {
            Properties properties = new Properties();
            try {pro
              properties.load(new StringReader(configInfo));
            } catch (IOException e) {
              e.printStackTrace();
            }
            System.out.println("config changed: " + properties);
          }

          @Override
          public Executor getExecutor() {
            return null;
          }
        });
  }

}

七、项目验证

启动provider-service项目,这时候我们nacos与本地都没有用户配置信息时
访问接口: http://localhost:18081/user
在这里插入图片描述

这时我们看到user1的name与age(int 默认为0)都是没有的,而user2的name=zz,age=25是@Value定义的默认值

然后我们在本地配置user1的信息,在application.yml中添加

user1:
  name: local
  age: 30

重启项目后刷新接口,可以看到user1的name与age对应我们本地的配置信息
在这里插入图片描述

最后我们在nacos后台添加配置
在这里插入图片描述
点击发布后,我们刷新接口可以看到user1与user2的配置都更新为nacos配置的信息
在这里插入图片描述

最后

这样我们就将生产服务接入了nacos的配置中心,在配置中心有配置时,优先取配置中心中的配置,当配置中心不存在配置时,会从本地环境加载数据。

上一篇:【零开始学习SpringCloud Alibaba(一)】
下一篇:【零开始学习SpringCloud Alibaba(三)】

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值