-
发布配置
浏览器访问 http://127.0.0.1:8848/nacos ,打开nacos控制台,并点击菜单配置管理->配置列表:
在Nacos添加如下的配置:
Data ID: nacos-simple-demo.yaml
Group : DEFAULT_GROUP
配置格式: YAML
配置内容: common:
config1: something
-
java工程获取配置
pom依赖
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.3</version> </dependency>
java代码
package com.zeng;
import java.util.Properties;
import java.util.concurrent.Executor;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;
/**
* Config service example
*
* @author Nacos
*
*/
public class ConfigExample {
public static void main(String[] args) throws NacosException, InterruptedException {
String serverAddr = "localhost";
String dataId = "nacos-simple-demo.yaml";
String group = "DEFAULT_GROUP";
String namespace="405e2609-c439-4b1e-b177-82f5a5ce2a0b";
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
properties.put(PropertyKeyConst.NAMESPACE,namespace);
ConfigService configService = NacosFactory.createConfigService(properties);
String content = configService.getConfig(dataId, group, 5000);
System.out.println("获取配置信息:"+content);
configService.addListener(dataId, group, new Listener() {
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("监听到更改:" + configInfo);
}
@Override
public Executor getExecutor() {
return null;
}
});
boolean isPublishOk = configService.publishConfig(dataId, group, "content");
System.out.println("是否发布成功?"+isPublishOk);
content = configService.getConfig(dataId, group, 5000);
System.out.println("获取配置信息:"+content);
boolean isRemoveOk = configService.removeConfig(dataId, group);
System.out.println("是否删除成功?"+isRemoveOk);
content = configService.getConfig(dataId, group, 5000);
System.out.println("获取配置信息:"+content);
Thread.sleep(300000);
}
}
运行打印日志:
获取配置信息:common:
config1: something
是否发布成功?true
获取配置信息:content
是否删除成功?true
监听到更改:null
获取配置信息:null
-
SpringBoot工程获取配置
pom依赖
<!--需要引入该jar才能使bootstrap配置文件生效--> <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>
bootstrap.yml
server: port: 8080 #启动端口 命令行注入 spring: application: name: service1 cloud: nacos: config: #enabled: false #关闭配置 server-addr: 127.0.0.1:8848 # 配置中心地址 file-extension: yaml #dataid 的名称就是application的name加file-extension service1.yaml namespace: 405e2609-c439-4b1e-b177-82f5a5ce2a0b # 开发环境 指定 具体的namespace group: TEST_GROUP # 测试组 # shared-dataids: ext-config-common01.properties,ext-config-common02.properties,ext-config-common03.properties # refreshable-dataids: ext-config-common01.properties #ext-config[0]: #data-id: ext-config-common01.properties #ext-config[1]: #data-id: ext-config-common02.properties #group: GLOBALE_GROUP #ext-config[2]: #data-id: ext-config-common03.properties #group: REFRESH_GROUP #refresh: true #动态刷新配置
Controller
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConfigController {
@Value("${common.config1:local}")
private String testValue;
@GetMapping(value = "/getConfig1")
public String getConfig1() {
return testValue;//不可动态更新
}
@Autowired
private ConfigurableApplicationContext configurableApplicationContext;
@GetMapping(value = "/getConfig2")
public String get2() {
//可动态更新
return configurableApplicationContext.getEnvironment().getProperty("common.config1");
}
}
启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootApp {
public static void main(String[] args) {
SpringApplication.run(SpringBootApp.class,args);
}
}
测试1
在nacos后台管理页面修改配置值:
测试2
结论:使用@Value注入不可动态更新值
-
SpringCloud工程获取配置
pom依赖
<!--需要引入该jar才能使bootstrap配置文件生效--> <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>
bootstrap.yml
server: port: 8080 #启动端口 命令行注入 spring: application: name: service1 cloud: nacos: config: #enabled: false #关闭配置 server-addr: 127.0.0.1:8848 # 配置中心地址 file-extension: yaml #dataid 的名称就是application的name加file-extension service1.yaml namespace: 405e2609-c439-4b1e-b177-82f5a5ce2a0b # 开发环境 指定 具体的namespace group: TEST_GROUP # 测试组 # shared-dataids: ext-config-common01.properties,ext-config-common02.properties,ext-config-common03.properties # refreshable-dataids: ext-config-common01.properties #ext-config[0]: #data-id: ext-config-common01.properties #ext-config[1]: #data-id: ext-config-common02.properties #group: GLOBALE_GROUP #ext-config[2]: #data-id: ext-config-common03.properties #group: REFRESH_GROUP #refresh: true #动态刷新配置
Controller
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope
public class ConfigController {
@Value("${common.config1:local}")
private String testValue;
@GetMapping(value = "/getConfig")
public String getConfig() {
return testValue;//可动态更新
}
}
启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringCloudApp {
public static void main(String[] args) {
SpringApplication.run(SpringCloudApp.class,args);
}
}
测试1
在nacos后台管理页面修改配置值:
测试2
结论:使用@Value注入不可动态更新值,但给类加上注解@RefreshScope便支持动态更新了
文档参考
链接: https://pan.baidu.com/s/19ulCJ0x12Qmu8nRQVFi8hg
提取码: aby1