三、SpringCloud Alibab使用nacos作为配置中心

nacos不仅作为注册中心,还可以作为配置中心。

 

在Consumer添加依赖:

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

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
        <version>3.1.1</version>
    </dependency>

添加bootstrap.properties:

spring.cloud.nacos.config.server-addr=127.0.0.1:8848

nacos配置要放在bootstrap.properties文件中。

 

打开Nacos控制台,在左侧的配置管理 > 配置列表下点击创建配置按钮,

 

Data ID填的是服务名,Group是组名,默认值是DEFAULT_GROUP。

 

修改HelloConsumer:

@Value("${my}")
private String my;

@RequestMapping("/configValue")
public String configValue() {
    return my;
}

访问http://localhost:7001/consumer/configValue,看到123

 

当Nacos Config加载配置时,还会加载DataId为${spring.application.name}.${file-extension:properties}的基本配置,以及DataId为${spring.application.name}-${profile}.${file extension:properties}。如果需要使用不同环境中的不同配置,可以使用spring提供的${spring.profiles.active}配置。例如:

在bootstrap.properties增加配置:

spring.profiles.active=dev

在nacos重新配置:

 

Data ID为consumer-dev.properties,必须写上文件后缀名。访问http://localhost:7001/consumer/configValue,看到123

 

nacos还支持yaml格式的配置文件,在bootstrap.properties增加配置:

spring.application.name=consumer

spring.profiles.active=dev
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.cloud.nacos.config.file-extension=yml

在nacos重新配置:

 

注意spring.cloud.nacos.config.file-extension的值要和Data ID的文件后缀名相同。

 

访问http://localhost:7001/consumer/configValue,看到123。在nacos修改配置的my为123tyui,访问http://localhost:7001/consumer/configValue,看到123。没看到最新的配置。需要在HelloConsumer加@RefreshScope,不用重启就可看到修改后的配置。

 

将HelloConsumer上的@RefreshScope和@Value("${my}")注释,添加:

@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserConfig {

    private String name;

    private Integer age;
}

在到ConsumerApplication启动类添加@EnableConfigurationProperties。修改HelloConsumer:

@Autowired
private UserConfig userConfig;

 @RequestMapping("/userConfig")
public UserConfig userConfig() {
    return userConfig;
}

在nacos添加配置:

 

访问http://localhost:7001/consumer/userConfig,看到{"name":"张三","age":36}。修改nacos配置:

发布配置后不重启Consumer,访问http://localhost:7001/consumer/userConfig,看到{"name":"张三","age":18}。@ConfigurationProperties获取配置是不需要添加@RefreshScope不重启即可获取修改后的配置值。@Value获取配置是需要添加@RefreshScope才能不重启获取修改后的配置值

 

命名空间用于隔离不同租户的配置。组和数据ID在不同的命名空间中可以是相同的。命名空间的典型场景是不同环境的配置隔离,例如,开发/测试环境和生产环境(配置和服务等)之间的隔离。如果${spring.cloud.Nacos.config.namespace}中未指定命名空间,则使用Nacos的“Public”命名空间。在nacos添加名为dev的namespace,namesapce id是ccf23046-6117-44c2-9e15-a26e1fcfe601。在bootstrap.properties增加配置:

spring.application.name=consumer

spring.profiles.active=dev
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.cloud.nacos.config.file-extension=yml

spring.cloud.nacos.config.namespace=ccf23046-6117-44c2-9e15-a26e1fcfe601
spring.cloud.nacos.config.group=myGrourp

自定义组名myGrourp。在nacos中新增配置,namespace选择dev:

访问http://localhost:7001/consumer/userConfig,看到{"name":"李四","age":18}

posted @ 2023-05-14 16:07  shigp1  阅读(99)  评论(0)    收藏  举报