关于java:On-NacosSpringBoot-方式使用-Nacos

35次阅读

共计 5255 个字符,预计需要花费 14 分钟才能阅读完成。

如果大家想要理解更多的 Nacos 教程,欢送 star《On Nacos》开源我的项目。基于 Nacos 2.x 的入门、原理、源码、实战介绍,帮忙开发者疾速上手 Nacos。

本文介绍下如何在 Spring Boot 我的项目中应用 Nacos,Nacos 次要分为两个局部,配置核心和服务注册与发现。在应用 Spring Boot 我的项目中应用 Nacos,首先要保障启动一个 Nacos 服务,具体能够参考【疾速上手 Nacos】来搭建一个单机的 Nacos 服务。

Nacos 封装 starter 的源代码能够参考 【nacos-spring-boot-project】 这个我的项目,感兴趣的敌人能够查看源代码。

本篇文章的具体的代码示例点击【nacos-spring-boot】查看

配置核心

创立配置

关上控制台 http://127.0.0.1:8848/nacos,进入 配置管理 - 配置列表 点击 + 号新建配置,这里创立个数据源配置例子: nacos-datasource.yaml

spring:
    datasource:
     name: datasource
     url: jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useDynamicCharsetInfo=false&useSSL=false
     username: root
     password: root
     driverClassName: com.mysql.jdbc.Driver

增加依赖

配置创立好就能够在控制台 配置管理 - 配置列表中查看到。接下来演示下怎么在 Spring Boot 我的项目中获取到 Nacos 中的配置信息。

须要在我的项目中增加以下依赖:

<!-- 配置核心 starter-->
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>${latest.version}</version>
</dependency>

而后在我的项目中的 application.properties 文件中增加 nacos 的一些配置:

nacos.config.server-addr=127.0.0.1:8848
nacos.config.group=DEFAULT_GROUP
nacos.config.namespace=
nacos.config.username=nacos
nacos.config.password=nacos

获取配置

绑定到类获取

能够通过 @NacosConfigurationProperties 注解将 nacos-datasource.yaml 中的配置绑定到 NacosDataSourceConfig 类上。这样就能够通过 @Resource@Autowired 将 NacosDataSourceConfig 注入到要应用的中央。

@NacosConfigurationProperties(prefix = "spring.datasource", dataId = "nacos-datasource.yaml", autoRefreshed = true)
@Component
@Data
public class NacosDataSourceConfig {
    
    private String name;
    
    private String url;
    
    private String username;
    
    private String password;
    
    private String driverClassName;
}

创立一个 Controller,写一个获取配置信息的接口:

/**
 * @author lixiaoshuang
 */
@RestController
@RequestMapping(path = "springboot/nacos/config")
public class NacosConfigController {
    
    @Resource
    private NacosDataSourceConfig nacosDataSourceConfig;
    
    @GetMapping(path = "get")
    private Map<String, String> getNacosDataSource() {Map<String, String> result = new HashMap<>();
        result.put("name", nacosDataSourceConfig.getName());
        result.put("url", nacosDataSourceConfig.getUrl());
        result.put("username", nacosDataSourceConfig.getUsername());
        result.put("password", nacosDataSourceConfig.getPassword());
        result.put("driverClassName", nacosDataSourceConfig.getDriverClassName());
        return result;
    }
}

而后启动服务,拜访 http://localhost:8080/springboot/nacos/config/binding/class/get 就能够获取到对应的配置信息:

@NacosValue+@NacosPropertySource 注解获取

在创立一个 properties 格局的配置,演示下应用 @NacosValue + @NacosPropertySource 注解获取配置信息。还是关上 配置管理 - 配置列表 点击 + 号新建配置:nacos-datasource.properties

name=datasource
url=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useDynamicCharsetInfo=false&useSSL=false
username=root
password=root
driverClassName=com.mysql.jdbc.Driver

通过 @NacosValue + @NacosPropertySource 注解获取指定 dataId 的配置

/**
 * @author lixiaoshuang
 */
@RestController
@RequestMapping(path = "springboot/nacos/config")
@NacosPropertySource(dataId = "nacos-datasource.properties", autoRefreshed = true, before = SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, after = SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME)
public class AnnotationGetController {@NacosValue(value = "${name:}", autoRefreshed = true)
    private String name;
    
    @NacosValue(value = "${url:}", autoRefreshed = true)
    private String url;
    
    @NacosValue(value = "${username:}", autoRefreshed = true)
    private String username;
    
    @NacosValue(value = "${password:}", autoRefreshed = true)
    private String password;
    
    @NacosValue(value = "${driverClassName:}", autoRefreshed = true)
    private String driverClassName;
    
    @GetMapping(path = "annotation/get")
    private Map<String, String> getNacosDataSource2() {Map<String, String> result = new HashMap<>();
        result.put("name", name);
        result.put("url", url);
        result.put("username", username);
        result.put("password", password);
        result.put("driverClassName", driverClassName);
        return result;
    }
}

拜访 http://localhost:8080/springboot/nacos/config/annotation/get 获取 nacos-datasource.properties 的配置信息:

配置监听

Spring Boot 的应用形式也能够通过 @NacosConfigListener 注解进行配置变更的监听,在创立一个 hello-nacos.text 配置:

/**
 * @author lixiaoshuang
 */
@Component
public class ConfigListener {
    
    /**
     * 基于注解监听配置
     *
     * @param newContent
     * @throws Exception
     */
    @NacosConfigListener(dataId = "hello-nacos.text", timeout = 500)
    public void onChange(String newContent) {System.out.println("配置变更为 : \n" + newContent);
    }
    
}

而后在将 hello-nacos.text 的配置内容批改为”hello nacos config“,代码中就会回调 onChange() 办法

服务注册 & 发现

服务注册

在我的项目中增加以下依赖:

<!-- 注册核心 starter-->
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-discovery-spring-boot-starter</artifactId>
    <version>${latest.version}</version>
</dependency>

而后在我的项目中的 application.properties 文件中增加 nacos 的一些配置:

nacos.discovery.server-addr=127.0.0.1:8848
nacos.discovery.auto-register=true
nacos.discovery.register.clusterName=SPRINGBOOT
nacos.discovery.username=nacos
nacos.discovery.password=nacos

当增加完配置当前,并且开启了主动注册,启动服务当前看到上面这段日志,就阐明服务注册胜利了。

Finished auto register service : SPRING_BOOT_SERVICE, ip : 192.168.1.8, port : 8222

服务发现

能够应用 Nacos 提供的 NacosNamingService 来获取到服务的实例,能够通过 @NacosInjected 注解将 NacosNamingService 注入到须要应用的中央。

/**
 * @author lixiaoshuang
 */
@RestController
@RequestMapping(path = "springboot/nacos/discovery")
public class NacosDiscoveryController {
    
    @NacosInjected
    private NacosNamingService nacosNamingService;
    
    @RequestMapping(path = "get")
    public List<Instance> getInfo(@RequestParam("serviceName") String serviceName) throws NacosException {return nacosNamingService.getAllInstances(serviceName);
    }
}

通过调用 http://localhost:8222/springboot/nacos/discovery/get?serviceName=SPRING_BOOT_SERVICE 获取 SPRING_BOOT_SERVICE 服务的实例信息。

正文完
 0