nacos集成
参考https://nacos.io/zh-cn/docs/quick-start-spring-boot.html
https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
一、springboot集成(配置中心)
依赖:
<!-- nacos配置中心--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>${nacos.version}</version> </dependency>application的配置:
nacos.config.server-addr=127.0.0.1:8848使用
@NacosPropertySource加载dataId为example的配置源,并开启自动更新(自行决定):@SpringBootApplication @NacosPropertySource(dataId = "example", autoRefreshed = true) public class NacosConfigApplication { public static void main(String[] args) { SpringApplication.run(NacosConfigApplication.class, args); } }通过 Nacos 的
@NacosValue注解设置属性值。@Controller @RequestMapping("config") public class ConfigController { @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true) private boolean useLocalCache; @RequestMapping(value = "/get", method = GET) @ResponseBody public boolean get() { return useLocalCache; } }启动
NacosConfigApplication,调用curl http://localhost:8080/config/get,返回内容是false。通过调用 Nacos Open API 向 Nacos server 发布配置:dataId 为
example,内容为useLocalCache=truecurl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP&content=useLocalCache=true"再次访问
http://localhost:8080/config/get,此时返回内容为true,说明程序中的useLocalCache值已经被动态更新了。
二、springboot集成(注册中心)
依赖:
<!-- nacos注册中心--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-discovery-spring-boot-starter</artifactId> <version>${nacos.version}</version> </dependency>application的配置:
nacos.discovery.server-addr=127.0.0.1:8848使用
@NacosInjected注入 Nacos 的NamingService实例:@Controller @RequestMapping("discovery") public class DiscoveryController { @NacosInjected private NamingService namingService; @RequestMapping(value = "/get", method = GET) @ResponseBody public List<Instance> get(@RequestParam String serviceName) throws NacosException { return namingService.getAllInstances(serviceName); } } @SpringBootApplication public class NacosDiscoveryApplication { public static void main(String[] args) { SpringApplication.run(NacosDiscoveryApplication.class, args); } }启动
NacosDiscoveryApplication,调用curl http://localhost:8080/discovery/get?serviceName=example,此时返回为空 JSON 数组[]。通过调用 Nacos Open API 向 Nacos server 注册一个名称为
example服务curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=8080'再次访问
curl http://localhost:8080/discovery/get?serviceName=example,此时返回内容为:
[
{
"instanceId": "127.0.0.1-8080-DEFAULT-example",
"ip": "127.0.0.1",
"port": 8080,
"weight": 1.0,
"healthy": true,
"cluster": {
"serviceName": null,
"name": "",
"healthChecker": {
"type": "TCP"
},
"defaultPort": 80,
"defaultCheckPort": 80,
"useIPPort4Check": true,
"metadata": {}
},
"service": null,
"metadata": {}
}
]三、springcloud集成
依赖(注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本),参考https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${latest.version}</version>
</dependency>在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}prefix默认为spring.application.name的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。spring.profiles.active即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profiles.active为空时,对应的连接符-也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置。目前只支持properties和yaml类型。
- 通过 Spring Cloud 原生注解
@RefreshScope实现配置自动更新:
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
}