From 961d87d9e0508a7743bdd9d5a043e907f8756ab0 Mon Sep 17 00:00:00 2001 From: Jianwei Mao Date: Mon, 1 Apr 2019 15:37:51 +0800 Subject: [PATCH] Add an usage for config listener 1. add an example that reacting to the change of config data using Listener. 2. update string format of output. --- .../alibaba/cloud/examples/Application.java | 52 +++++++++++++++++-- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Application.java b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Application.java index 1818a2e0..c59ac9c9 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Application.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Application.java @@ -1,17 +1,24 @@ package org.springframework.cloud.alibaba.cloud.examples; +import com.alibaba.nacos.api.config.listener.Listener; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.alibaba.nacos.NacosConfigProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.Executor; + /** - * @author xiaojing + * @author xiaojing, Jianwei Mao */ @SpringBootApplication public class Application { @@ -27,13 +34,48 @@ class SampleRunner implements ApplicationRunner { @Value("${user.name}") String userName; - @Value("${user.age}") + @Value("${user.age:25}") int userAge; + + @Autowired + private NacosConfigProperties nacosConfigProperties; + @Override public void run(ApplicationArguments args) throws Exception { - System.out.println(userName); - System.out.println(userAge); + System.out.println(String.format("Initial username=%s, userAge=%d", userName, userAge)); + + nacosConfigProperties.configServiceInstance() + .addListener("nacos-config-example.properties", "DEFAULT_GROUP", new Listener() { + + /** + * Callback with latest config data. + * + * For example, config data in Nacos is: + * + * user.name=Nacos + * user.age=25 + * + * @param configInfo latest config data for specific dataId in Nacos server + */ + @Override + public void receiveConfigInfo(String configInfo) { + String [] configLines = configInfo.split("\r\n"); + Map configs = new HashMap<>(); + for (String c : configLines) { + String [] configPair = c.split("="); + configs.put(configPair[0], configPair[1]); + } + + System.out.println(String.format("Latest username=%s, userAge=%s", + configs.get("user.name"), configs.get("user.age"))); + } + + @Override + public Executor getExecutor() { + return null; + } + }); } } @@ -44,7 +86,7 @@ class SampleController { @Value("${user.name}") String userName; - @Value("${user.age}") + @Value("${user.age:25}") int age; @RequestMapping("/user")