Nacos作为配置中心源码分析
1、什么是Naocs配置中心
官方文档: Nacos config · alibaba/spring-cloud-alibaba Wiki · GitHub
Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
2、Nacos的使用
2.1 给Nacos2.1.0配置数据库
倒入数据
修改内容
2.2 版本推荐
版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
2.3 父工程指定版本
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.2.RELEASE</version> </parent> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <spring-cloud-alibaba.version>2.2.9.RELEASE</spring-cloud-alibaba.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2.4 子工程引入依赖
<dependencies> <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-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- 单元测试类 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
2.5 利用接口对配置进行操作
public class ConfigListenerTest { private static String serverAddr = "localhost"; private static String dataId = "nacos-demo.yaml"; private static String group = "DEFAULT_GROUP"; private static ConfigService configService; @Test public void testListener() throws NacosException, InterruptedException { Properties properties = new Properties(); properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr); //获取配置服务 configService = NacosFactory.createConfigService(properties);; //获取配置 String content = configService.getConfig(dataId, group, 5000); System.out.println(content); //注册监听器 CountDownLatch countDownLatch = new CountDownLatch(5); configService.addListener(dataId, group, new Listener() { @Override public Executor getExecutor() { return null; } @Override public void receiveConfigInfo(String configInfo) { System.out.println("配置发生变化:" + configInfo); countDownLatch.countDown(); } }); countDownLatch.await(); } @Test public void publishConfig() throws NacosException { Properties properties = new Properties(); properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr); //获取配置服务 configService = NacosFactory.createConfigService(properties); configService.publishConfig(dataId,group,"age: 30", ConfigType.PROPERTIES.getType()); } @Test public void removeConfig() throws NacosException, InterruptedException { Properties properties = new Properties(); properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr); //获取配置服务 configService = NacosFactory.createConfigService(properties); boolean isRemoveOk = configService.removeConfig(dataId, group); System.out.println(isRemoveOk); } }
2.6 和Springboot整合
@RefreshScope @RestController public class NacosConfigController { @Value("${name}") private String name; @RequestMapping("/getName") public String getName(HttpServletRequest httpRequest){ return name; } }
2.7 里面放置定时任务
启动
@EnableScheduling @SpringBootApplication public class NacosConfigApplication { public static void main(String[] args) { SpringApplication.run(NacosConfigApplication.class);