Nacos-配置中心
·
Nacos-配置中心
配置中心-基本使用
- 启动Nacos
进入Nacos安装目录中的bin
启动命令: startup.cmd -m standalone - 引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- application.properties配置
spring.application.name=service-order
server.port=8000
spring.cloud.nacos.server-addr=127.0.0.1:8848
spring.config.import=nacos:service-order.properties
- 创建data-id(数据集)


5. 测试
package com.nie.order.controller;
import com.nie.order.bean.Order;
import com.nie.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OrderController {
@Value("${order.timeout}")
private String orderTimeout;
@Value("${order.auto-confirm}")
private String orderAutoConfirm;
@GetMapping("/config")
public String config(){
return "order.timeout = " + orderTimeout + ", order.auto-confirm = " + orderAutoConfirm;
}
}

这时候我们修改之后我们他并没有更改值


我们需要加入@RefreshScope激活配置属性的自动刷新

这时候我们就不用重启项目就能拿到最新修改的值
提示:假如我们的微服务暂时用不到配置中心,但是我们统一加入了配置中心的依赖,导致了项目启动不起来,我们应该在application.properties中加入
spring.cloud.nacos.config.import-check.enabled=false
加入之后就可以正常启动了 这句话的意思是禁用导入检查
动态刷新
如果我们有很多经常使用的值 我们可以将他抽取到一个类中
package com.nie.order.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
//这时候不需要@RefreshScope就可以完成自动刷新
@ConfigurationProperties(prefix = "order")
@Data
public class OrderProperties {
String timeout;
String autoConfirm;
}
package com.nie.order.controller;
import com.nie.order.bean.Order;
import com.nie.order.properties.OrderProperties;
import com.nie.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OrderController {
@Autowired
private OrderProperties orderProperties;
@GetMapping("/config")
public String config(){
return "order.timeout = " + orderProperties.getTimeout()
+ ", order.auto-confirm = " + orderProperties.getAutoConfirm();
}
@GetMapping("/create")
public Order createOrder(@RequestParam("userId") Long userId,
@RequestParam("productId") Long productId){
Order order = orderService.createOrder(productId,userId);
return order;
}
}


配置监听
package com.nie.order;
import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.cloud.nacos.annotation.NacosConfig;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@SpringBootApplication
@EnableDiscoveryClient
public class OrderMainApplication {
public static void main(String[] args) {
SpringApplication.run(OrderMainApplication.class,args);
}
@Bean
ApplicationRunner applicationRunner(NacosConfigManager nacosConfigManager) {
return args -> {
ConfigService configService = nacosConfigManager.getConfigService();
configService.addListener("service-order.properties",
"DEFAULT_GROUP", new Listener() {
@Override
public Executor getExecutor() {
return Executors.newFixedThreadPool(4);
}
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("变化的配置信息: " + configInfo);
//模拟一下
System.out.println("进行邮件通知");
}
});
System.out.println("=======");
};
}
}
运行后 当我们修改里面的元素时

收到了所有变换的值

配置优先级
先导入优先,外部优先
数据隔离
-
区分多套环境
用命名空间来区分多套环境

-
区分多种微服务
用group来区分多种微服务

-
区分多种配置
用 data-id来区分多种配置

-
按需加载配置
动态选择指定的名称空间
配置application.yml
server:
port: 8000
spring:
profiles:
# 选择那一套
active: dev
application:
name: service-order
cloud:
nacos:
server-addr: 127.0.0.1:8848
config:
namespace: ${spring.profiles.active:dev}
import-check:
enabled: false
---
spring:
config:
import:
- nacos:common.properties?group=order
- nacos:database.properties?group=order
activate:
on-profile: dev
---
spring:
config:
import:
- nacos:common.properties?group=order
activate:
on-profile: test
更多推荐
所有评论(0)