安装之前请确保Java环境和maven环境正常:
- 64 bit JDK 1.8+;
- Maven 3.2.x+;
我选择直接下载安装包:https://github.com/alibaba/nacos/releases下的nacos-server-1.1.3.zip
双击startup.cmd运行文件
出现以下界面说明运行成功了
如果启动失败有可能是外部数据库没配置好,执行一下下面的sql就行:
可以看到已经创建了nacos所需的数据库:
启动nacos成功后,可通过nacos提供的http api验证nacos服务运行是否正常。我使用的是Postman测试
如下Post命令表示向nacos发布一个配置:
http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=test_id&group=test_group&content=HelloWorld
GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=test_id &group=test_group "
通过测试发现,可以从nacos获取前边发布的配置:HelloWorld
除了使用open api外,一般都是在nacos控制台直接配置。浏览器访问 http://127.0.0.1:8848/nacos ,打开nacos控制台,并点击菜单配置管理->配置列表:
Data ID: hello-nacos.yamlGroup : DEFAULT_GROUP配置格式 : YAML配置内容: someconfig :config1: something
第一步:点击新增配置
(1)新建一个名为nacos-demo的项目,使用的依赖如下:
com.alibaba.nacos
nacos-client
1.1.3
(2)编写Java类获取外部化配置
通过ConfigService这个类获取,完整代码如下:
public class SimpleDemoMain {
public static void main(String[] args) throws NacosException {
String serverAddr = "127.0.0.1:8848"; //nacos地址
String dataId = "hello-nacos.yaml";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr",serverAddr);
ConfigService configService = NacosFactory.createConfigService(properties);
//获取配置,String dataId, String group, long timeoutMs
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
}
}
Namespace :代表不同 环境 ,如开发、测试、生产环境。Group :代表某 项目 ,如 XX 医疗项目、 XX 电商项目DataId :每个项目下往往有若干个 工程 ,每个配置集 (DataId) 是一个工程的 主配置文件
1 、 nacos 服务地址,必须指定2 、 namespace ,如不指定默认 public3 、 group ,如不指定默认 DEFAULT_GROUP4 、 dataId ,必须指定
public class SimpleDemoMainListener {
public static void main(String[] args) throws NacosException {
//nacos 地址
String serverAddr = "127.0.0.1:8848";
String dataId = "hello-nacos.yaml";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr",serverAddr);
ConfigService configService = NacosFactory.createConfigService(properties);
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
//添加监听String dataId, String group, Listener listener
configService.addListener(dataId, group, new Listener() {
public Executor getExecutor() {
return null;
}
public void receiveConfigInfo(String s) {
//当配置发生变化时的响应
System.out.println(s);
}
});
// 测试让主线程不退出,因为订阅配置是守护线程,主线程退出守护线程就会退出。正式代码中无需下面代码
while (true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
当我们点击运行时和上面的获取配置效果是一样的,Java控制台输出:
然后我们在Nacos将hello-nacos.yaml修改(something修改为anything),此时可以看到Java控制台成功监听到我们的修改动作并且获取了最新的配置:
Namespace: 9cd826a1-2bb5-4eeb-a2fb-20cb95ea65f2 #开发环境Data ID: service1.yamlGroup : TEST_GROUP配置格式 : YAML配置内容: common:name: service1 config
service2:
Namespace: 9cd826a1-2bb5-4eeb-a2fb-20cb95ea65f2 #开发环境
Data ID: service2.yamlGroup : TEST_GROUP配置格式 : YAML配置内容: common:name: service2 config
4.0.0
com.xxx
nacos-demo
1.0-SNAPSHOT
service1
quickstart
pom
com.alibaba.nacos
nacos-client
1.1.3
com.alibaba.cloud
spring‐cloud‐alibaba‐dependencies
2.1.0.RELEASE
pom
import
org.springframework.cloud
spring‐cloud‐dependencies
Greenwich.RELEASE pom
import
org.springframework.boot
spring‐boot‐dependencies
2.1.3.RELEASE pom
import
org.springframework.boot
spring‐boot‐maven‐plugin
nacos-demo
com.xxx
1.0-SNAPSHOT
4.0.0
service1
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
org.springframework.boot
spring-boot-starter-web
server:
port: 56010
spring:
cloud:
nacos:
config:
group: TEST_GROUP
server-addr: 127.0.0.1:8848
file‐extension: yaml
namespace: 9cd826a1-2bb5-4eeb-a2fb-20cb95ea65f2
application:
name: service1
dataId: 默认是服务名+扩展名(service1.yml)
@SpringBootApplication
@RestController
public class Service1Bootstrap {
public static void main(String[] args) {
SpringApplication.run(Service1Bootstrap.class, args);
}
@Value("${common.name}")
private String config1;
@GetMapping("service1/config")
public String getConfig1(){
return config1;
}
}
启动service1通过浏览器查看(之前写成了service1 comfig):
server:
port: 56011
spring:
cloud:
nacos:
config:
group: TEST_GROUP
server-addr: 127.0.0.1:8848
file‐extension: yaml
namespace: 9cd826a1-2bb5-4eeb-a2fb-20cb95ea65f2
application:
name: service2
编写启动类和service1类似,通过浏览器访问:
基于2.2的例子,若要实现配置的动态更新,只需要进行如下改造(注入配置文件上下文):
@SpringBootApplication
@RestController
public class Service2Bootstrap {
public static void main(String[] args) {
SpringApplication.run(Service2Bootstrap.class, args);
}
// @Value("${common.name}")
// private String config1;
//
// @GetMapping("service2/config")
// public String getConfig1(){
// return config1;
// }
// 注入配置文件上下文
@Autowired
private ConfigurableApplicationContext applicationContext;
@GetMapping("service2/config2")
public String getConfig2(){
return applicationContext.getEnvironment().getProperty("common.name");
}
}
Note 可以通过配置spring.cloud.nacos.confifig.refresh.enabled=false来关闭动态刷新
通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。
新建一个service3子工程,配置文件如下:
server:
port: 56012
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: 9cd826a1-2bb5-4eeb-a2fb-20cb95ea65f2
# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
ext-config[0]:
data-id: ext-config-common01.properties
# 2、Data Id 不在默认的组,不支持动态刷新
ext-config[1]:
data-id: ext-config-common02.properties
group: GLOBALE_GROUP
# 3、Data Id 既不在默认的组,也支持动态刷新
ext-config[3]:
data-id: ext-config-common03.properties
group: REFRESH_GROUP
refresh: true
application:
name: service3
上面的配置文件遵循:
Note : spring.cloud.nacos.config.ext - config[n].data - id 的值必须带文件扩展名,文件扩展名既可支持properties,又可以支持 yaml/yml 。此时 spring.cloud.nacos.config.file - extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。
上面用到的三个配置文件内容分别如下:
编写测试代码:
@SpringBootApplication
@RestController
public class Service3Bootstrap {
public static void main(String[] args) {
SpringApplication.run(Service3Bootstrap.class, args);
}
// 注入配置文件上下文
@Autowired
private ConfigurableApplicationContext applicationContext;
@GetMapping("service3/config3")
public String getConfig2(){
String name = applicationContext.getEnvironment().getProperty("common.name");
String age = applicationContext.getEnvironment().getProperty("common.age");
String adderess = applicationContext.getEnvironment().getProperty("common.address");
return name + " " + age + " " + adderess;
}
}
访问结果表明可以读到三个不同的配置文件内容:
spring:
cloud:
nacos:
config:
shared‐dataids: ext-config-common01.properties,ext-config-common02.properties
refreshable‐dataids: ext-config-common01.properties
通过设置 spring.cloud.nacos.confifig.enabled = false 来完全关闭 Spring Cloud Nacos Confifig
startup ‐m cluster