【On Nacos】SpringBoot 方式使用 Nacos
2022/6/30 4:19:32
本文主要是介绍【On Nacos】SpringBoot 方式使用 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
服务的实例信息。
这篇关于【On Nacos】SpringBoot 方式使用 Nacos的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署
- 2024-04-14RAG应用开发实战02-相似性检索的关键 - Embedding
- 2024-04-14出海软件草根逆袭打法是什么?
- 2024-04-13鸿蒙原生应用再新丁!企查查 碧蓝航线 入局鸿蒙
- 2024-04-11RAG应用开发实战(01)-RAG应用框架和解析器
- 2024-04-10DevOps已死?2024年的DevOps将如何发展
- 2024-04-10码农必看:常见源代码混淆技术详解
- 2024-04-07以一当十丨TiDB 在东吴证券秀财 APP 的应用实践
- 2024-04-07月活超 1.1 亿,用户超 4 亿,你也在用的「知乎」是如何在超大规模 TiDB 集群上玩转多云多活的?来听听知乎代晓磊的答案!