美文网首页
Nacos学习(二)对Spring应用的支持

Nacos学习(二)对Spring应用的支持

作者: nzdxwl | 来源:发表于2019-11-05 00:08 被阅读0次

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配置以及相关配置
  1. 在启动类例如QuickstartApplication中添加@EnableNacosConfig
  2. 在配置类添加@NacosPropertySource(dataId = "<这里是dataid>", autoRefreshed = true) 注解指明对应nacos那个数据id,配置类中的属性则添加@NacosValue注解跟对应的配置项关联,例如:@NacosValue(value = "${homeText: default msg}", autoRefreshed = true)
  • 启用服务发现
  1. 在启动类例如QuickstartApplication中添加@EnableNacosDiscovery
  2. 注册当前服务到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” 的这两个,扩展配置数据分组可以与主配置数据分组不同。

相关文章

网友评论

      本文标题:Nacos学习(二)对Spring应用的支持

      本文链接:https://www.haomeiwen.com/subject/fsxjbctx.html