接上篇《微服务实战spring cloud alibaba(四)java服务注册到nacos》继续。本章主要讲述如何在项目中集成nacos的配置中心,并实现动态配置刷新的功能。既然是实战,直接上代码。
第一步、创建goods-service的项目。
第二步、添加nacos的配置中心依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
第三步、在resources目录下添加nacos配置中心的配置
1、创建一份bootstrap/yml文件
2、把如下的配置添加上.
spring: application: name: goods-service cloud: nacos: discovery: namespace: dd5ac069-bdf5-4d31-bbf3-2d111dcd3875 server-addr: 192.168.31.30:8848 config: server-addr: 192.168.31.30:8848 namespace: dd5ac069-bdf5-4d31-bbf3-2d111dcd3875 file-extension: yaml
application.yml里面的配置是:
server: port: 9002 spring: application: name: goods-service management: endpoints: web: exposure: include: refresh
第四步、编码阶段
4.1、创建GoodApplication.java
package com.umall.goods; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.context.config.annotation.RefreshScope; import com.alibaba.nacos.api.config.annotation.NacosConfigurationProperties; @SpringBootApplication @EnableDiscoveryClient public class GoodApplication { public static void main(String[] args) { SpringApplication.run(GoodApplication.class, args); } }
4.2、创建GoodController.java
package com.umall.goods.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.alibaba.nacos.api.config.annotation.NacosValue; import com.umall.goods.model.BaseResponse; import com.umall.goods.model.GoodsPoJo; import lombok.extern.slf4j.Slf4j; @RestController @Slf4j @RefreshScope public class GoodController { @Value("${good.stock}") private Integer stock; @RequestMapping("/good/info/{goodId}") public BaseResponse getGoodStock(@PathVariable("goodId") Integer goodId) { log.info("从nacos中获取到stock值是:{}", stock); GoodsPoJo good = GoodsPoJo.builder().goodId(goodId).stock(stock).build(); return BaseResponse.success(good); } }
4.3、创建HttpResponseStatus.java
package com.umall.goods.enu; public enum HttpResponseStatus { SUCCESS(200, "请求成功"); Integer code; String msg; HttpResponseStatus(Integer code, String msg) { this.code = code; this.msg = msg; } public Integer getCode() { return code; } public String getMsg() { return msg; } }
4.4、创建BaseResponse.java类
package com.umall.goods.model; import java.io.Serializable; import com.umall.goods.enu.HttpResponseStatus; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.ToString; import lombok.experimental.Builder; @NoArgsConstructor @AllArgsConstructor @ToString @EqualsAndHashCode @Builder @Data public class BaseResponse implements Serializable { /** * */ private static final long serialVersionUID = 1L; private Integer errorCode; private String errorMsg; private Object data; /** * 成功状态 * * @param good * @return */ public static BaseResponse success(GoodsPoJo good) { return BaseResponse.builder().errorCode(HttpResponseStatus.SUCCESS.getCode()) .errorMsg(HttpResponseStatus.SUCCESS.getMsg()).data(good).build(); } /** * 失败状态 * * @param status * @return */ public static BaseResponse fail(HttpResponseStatus status) { return BaseResponse.builder().errorCode(status.getCode()).errorMsg(status.getMsg()).build(); } }
4.5、创建GoodsPoJo.java类
package com.umall.goods.model; import java.io.Serializable; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.ToString; import lombok.experimental.Builder; @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode @ToString @Builder @Data public class GoodsPoJo implements Serializable { /** * */ private static final long serialVersionUID = 1L; private Integer goodId; private Integer stock; }
以上代码就写完了,如图:
补充说明:
1、上述内容,我们在bootstrap.yml里面完成了nacos.config的配置,记住,在实际工作中,如果使用到nacos的配置中心,需要把nacos.config配置到bootstrap.yml或者bootstrap.proerpties文件中,如果放置在application.yml或者application.properties文件中就不会生效。这点一定要记得。 2、nacos从配置中心读取值很简单,和spring项目一样,直接使用@Value注解即可,本演示项目的注解是放在GoodController.java文件里面的。 3、如果我们要涉及到属性动态更新,那么我们需要在带有@Value的类上添加@RefreshScope注解,本演示项目的注解是放在GoodController.java文件里面的。
第五步、nacos配置
1、我们进入到nacos的UI界面上,点击配置管理->配置列表,选中umall这个命名空间
创建一个goods-service.yaml的配置,内容如下:
备注:
1、这里的dataid一定要和项目中application.yml中的spring.application.name保持一致 2、这里我们采用yml格式的配置文件,在nacos里面对应的文件格式是:yaml,因此dataid的后缀名是yaml。 3、这里添加的good.stock属性是代码里面获取的,可以看GoodsController.java需要获取什么值。这个key-value随便配置,结合自己项目实际使用到的即可。
第六步、把项目运行起来
执行GoodApplication.java文件
第七步、测试获取配置的结果
访问:http://localhost:9002/good/info/2,我们可以看到
第八步、修改nacos的信息,实现动态刷新。
把值修改为12,并且发布
再刷新http://localhost:9002/good/info/2,我们可以看到结果已经变成了12
到这里我们就实现了:
1、在项目中添加nacos的配置中心的支持。
2、使用@Value注解获取nacos上的配置信息。
3、使用@refreshscope动态刷新获取nacos上的配置信息。
最后,本文的代码下载:点击下载
还没有评论,来说两句吧...