一、将配置文件放到nacos服务端,项目从nacos服务端读取配置文件
1、前提说明
- 本次改造的项目是 user-service
- 本博客在“读取配置文件中自定义的参数,并新建一个API接口”这篇博客的基础上进行改造。改造内容为:项目中增加nacos依赖、修改项目中的yml文件名为“bootstrap.yml”、将项目配置文件移到nacos服务端。
2、pom.xml 中,增加 nacos依赖
<!-- nacos 配置 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.9.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netiflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
3、删除 application.yml 文件,新建 bootstrap.yml 文件。bootstrap.yml 文件内容如下:
【特别注意】:(1)依赖nacos后,配置文件名改为了 bootstrap.yml 。(2)其中,namespace 要写命名空间ID,不要写public、dev等。
spring:
application:
name: user-service
cloud:
# nacos配置
nacos:
username: nacos #nacos服务端的登录用户名
password: nacos #nacos服务端的登录密码
config:
server-addr: ${nacos-server-addr}
namespace: a31af456-634b-470c-827a-67ace200t #注意要写命名空间ID,不要写public、dev等
group: DEFAULT_GROUP
file-extension: yml
profiles:
active: env
# nacos server地址
nacos-server-addr: 127.0.0.1:8848
4、项目启动类,加上 @EnableDiscoveryClient 注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
System.out.println("用户服务,启动完成");
}
}
5、nacos服务端,在对应的命名空间下 新建配置文件,文件名为"user-service-env.yml"。文件内容如下:
spring:
application:
name: user-service
server:
port: 8081
developer:
id: OHZ
name: 平凡英雄
desc: 一位热爱技术的开发者。因为热爱,所以无所畏惧。
二、从nacos注册中心,发现获取服务实例
1、前提说明
- 本次改造,是在上面第一部分集成nacos的基础上进行改造。
2、pom.xml 中,增加 nacos依赖
<!-- nacos依赖,从 nacos 注册中心去获取服务实例 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.9.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netiflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
3、bootstrap.yml中,nacos参数下面增加discovery相关配置
spring:
cloud:
# nacos配置
nacos:
discovery:
server-addr: ${nacos-server-addr}
namespace: a31af456-634b-470c-827a-67ace200t
三、使用@RefreshScope注解,实现当nacos中配置文件参数变化时,自动更新javaBean配置类的属性值
1、DeveloperConfig.java 配置类上,加上 @RefreshScope 注解
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
/**
* 开发者
*/
@Component
@ConfigurationProperties(prefix = "developer")
@RefreshScope
@Data
public class DeveloperConfig {
private String id;
private String name;
private String desc;
}