Nacos学习(二)对Spring应用的支持
nacos有以下三个子项目,Nacos Spring、Nacos Spring Boot、Nacos Spring Cloud,分别对应Spirngframework、Spring Boot和 Spring Cloud三个框架提供支持。
下面主要是介绍在Spring项目中如何使用Nacos Spring Boot或Nacos Spring Cloud与Nacos服务端交互,Spring Boot使用的是 2.1.9.RELEASE
版本
Nacos Spring Boot:
依赖以及版本:
在Spring Boot项目中添加以下依赖:
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.2</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.2</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-actuator</artifactId>
<version>0.2.2</version>
</dependency>
这里我们使用的0.2.2版本,使用当前最新版本是0.2.3也是可以的,小版本的变化一般都能兼容,使用nacos-discovery-spring-boot-actuator依赖的原因是它提供了一个EndPoint,EndPoint的访问地址为 http://ip:port/actuator/nacos-discovery
,可通过它来查看相关信息
添加配置
- 在application.properties中添加相关配置,以下是示例:
nacos.config.server-addr=127.0.0.1:8848
nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=health,info,nacos-discovery
前面两行分别配置nacos配置中心地址以及服务中心地址,这里使用同一nacos服务器端。
最后一行则是配置应用要暴露的actuator终端点,这里只允许health、info和nacos增加的nacos-discovery终端点
- 启用nacos配置以及相关配置
- 在启动类例如QuickstartApplication中添加@EnableNacosConfig
- 在配置类添加@NacosPropertySource(dataId = "<这里是dataid>", autoRefreshed = true) 注解指明对应nacos那个数据id,配置类中的属性则添加@NacosValue注解跟对应的配置项关联,例如:@NacosValue(value = "${homeText: default msg}", autoRefreshed = true)
- 启用服务发现
- 在启动类例如QuickstartApplication中添加@EnableNacosDiscovery
- 注册当前服务到nacos server,例如:
@Value(value = "${nacos.discovery.server-addr}") //直接读取配置项
private String serverAddr;
@PostConstruct
private void init() {
try {
String serverAddr = getServerAddr();
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
NamingService naming = NamingFactory.createNamingService(properties);
naming.registerInstance("quickstart", "192.168.43.104", 8181);
} catch (NacosException e) {
e.printStackTrace();
}
}
Nacos Spring Cloud:
依赖以及版本:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
这里使用的是Nacos Spring Cloud 0.9.0.RELEASE
的版本,注意到groupId和artifactId已经变成spring命名方式了,并且nacos-discovery终端点也整合到nacos-discovery依赖包中了。
添加配置
- 在bootstrap.properties中添加相关配置,以下是示例:
spring.application.name=quickstart_cloud
spring.cloud.nacos.discovery.server-addr=192.168.43.104:8848
#配置中心参数
spring.cloud.nacos.config.server-addr=192.168.43.104:8848
spring.cloud.nacos.config.file-extension=properties
#Spring Boot actuator功能参数
management.endpoints.web.exposure.include=health,info,nacos-discovery
spring boot本身功能参数以及nacos跟配置中心相关参数需要放在bootstrap配置文件中,其他例如spring.application.name等参数则可以在application.properties中配置,此时放一起方便说明。
Nacos Spring Cloud可以支持多个datatid。
-
单dataid时,nacos服务器端配置的dataid需要以下格式组成:<spring.application.name>.file-extension,例如对应以上示例,服务器端dataid需要命名为:quickstart_cloud.properties,并且采用properties格式来保存配置数据,由于已经使用dataid跟应用关联了,所以配置类只需要添加@RefreshScope标识启用自动刷新,在类属性使用原生的Spring注解 @Value来关联配置项即可。在启动类添加@EnableDiscoveryClient启用自动发现客户端后,会自动将服务注册到nacos服务器端。
-
Nacos Spring Cloud支持多dataid配置,如果之前是单个dataid的设置,那么可以使用ext-config添加其他dataid的配置,使用数组索引对应不同dataid数据,并且设置在同一group内,示例配置如下:
spring.application.name=quickstart_main
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.ext-config[0].data-id=quickstart_cloud.properties
spring.cloud.nacos.config.ext-config[0].group=quickstart_cloud
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=quickstart_cloud.yaml
spring.cloud.nacos.config.ext-config[1].group=quickstart_cloud
spring.cloud.nacos.config.ext-config[1].refresh=true
上面示例除了使用dataid等于“quickstart_main.yaml”的配置数据外,还有两个扩展的配置,dataid为“ quickstart_cloud.properties”和“quickstart_cloud.yaml” 的这两个,扩展配置数据分组可以与主配置数据分组不同。