当前位置: 首页 > 后端技术 > Java

【关于Nacos】在SpringBoot模式下使用Nacos

时间:2023-04-02 00:14:45 Java

想了解更多Nacos教程,欢迎star《On Nacos》开源项目。基于Nacos2.x的介绍、原理、源码、实战介绍,帮助开发者快速上手Nacos。本文介绍如何在SpringBoot项目中使用Nacos。Nacos主要分为两部分,配置中心和服务注册与发现。在SpringBoot项目中使用Nacos,首先要保证Nacos服务已经启动。详情请参考【快速入门Nacos】搭建单机Nacos服务。Nacospackagestarter源码请参考【nacos-spring-boot-project】,感兴趣的朋友可以查看源码。本文详细代码示例,点击【nacos-spring-boot】查看配置中心创建配置。打开控制台http://127.0.0.1:8848/nacos,进入配置管理-配置列表,点击+号新建配置,这里创建一个数据源配置示例:nacos-datasource.yamlspring:datasource:name:datasourceurl:jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useDynamicCharsetInfo=false&useSSL=false用户名:root密码:rootdriverClassName:com.mysql.jdbc。Driver添加依赖配置并创建,可以在控制台配置管理-配置列表中查看。接下来演示如何在SpringBoot项目中获取Nacos中的配置信息。项目中需要添加如下依赖:com.alibaba.bootnacos-config-spring-boot-starter${latest.version}然后在项目的application.properties文件中添加nacos的一些配置:nacos.config.server-addr=127.0.0.1:8848nacos.config.group=DEFAULT_GROUPnacos.config.namespace=nacos.config.username=nacosnacos.config.password=nacosgetconfigurationboundtoclassget可以通过@NacosConfigurationProperties注解将nacos-datasource.yaml中的配置绑定到NacosDataSourceConfig类。这样就可以通过@Resource或者@Autowired将NacosDataSourceConfig注入到要使用的地方。@NacosConfigurationProperties(prefix="spring.datasource",dataId="nacos-datasource.yaml",autoRefreshed=true)@Component@DatapublicclassNacosDataSourceConfig{privateStringname;私人字符串网址;私有字符串用户名;私有字符串密码;privateStringdriverClassName;}创建一个Controller,写一个获取配置信息的接口:/***@authorlixiaoshuang*/@RestController@RequestMapping(path="springboot/nacos/config")publicclassNacosConfigController{@ResourceprivateNacosDataSourceConfignacosDataSourceConfig;@GetMapping(path="get")privateMapgetNacosDataSource(){Mapresult=newHashMap<>();result.put("名称",nacosDataSourceConfig.getName());result.put("url",nacosDataSourceConfig.getUrl());result.put("用户名",nacosDataSourceConfig.getU用户名());result.put("密码",nacosDataSourceConfig.getPassword());result.put("driverClassName",nacosDataSourceConfig.getDriverClassName());返回结果;然后启动服务,访问http://localhost:8080/springboot/nacos/config/binding/class/get即可获取到相应的配置信息:@NacosValue+@NacosPropertySource注解创建属性格式的配置,使用@演示中NacosValue+@NacosPropertySource注解获取配置信息或者打开配置管理-配置列表点击+号新建配置:nacos-datasource.propertiesname=datasourceurl=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useDynamicCharsetInfo=false&useSSL=falseusername=rootpassword=rootdriverClassName=com.mysql.jdbc.Driver通过@NacosValue+@NacosPropertySource注解获取指定dataId的配置/***@authorlixiaoshuang*/@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)publicclassAnnotationGetController{@NacosValue(value="${name:}",autoRefreshedateStringconame)(value="${url:}",autoRefreshed=true)privateStringurl;@NacosValue(value="${username:}",autoRefreshed=true)私有字符串用户名;@NacosValue(value="${password:}",autoRefreshed=true)privateStringpassword;@NacosValue(value="${driverClassName:}",autoRefreshed=true)privateStringdriverClassName;@GetMapping(path="annotation/get")privateMapgetNacosDataSource2(){Mapresult=newHashMap<>();result.put("名字",名字);结果.put("url",url);result.put("用户名",用户名);result.put("密码",密码);result.put("driverClassName",driverClassName);返回结果;}}访问http://localhost:8080/springboot/nacos/config/annotation/get获取nacos-datasource.properties的配置信息:配置监控使用SpringBoot还可以通过@NacosConfigListener注解监控配置变化,以及创建一个hello-nacos.text配置:/***@authorlixiaoshuang*/@ComponentpublicclassConfigListener{/***基于注解的监听配置**@paramnewContent*@throwsException*/@NacosConfigListener(dataId="hello-nacos.text",timeout=500)publicvoidonChange(StringnewContent){System.out.println("配置修改为:\n"+newContent);然后修改hello-nacos.text的配置内容为“hellonacosconfig”,代码会回调onChange()方法服务注册&发现服务注册在项目中添加如下依赖:com.alibaba.bootnacos-discovery-spring-boot-starter${latest.version}然后在项目的application.properties文件中添加nacos的一些配置:nacos.discovery.server-addr=127.0.0.1:8848nacos.discovery.auto-register=truenacos.discovery.register.clusterName=SPRINGBOOTnacos.discovery.username=nacosnacos.discovery.password=nacos当添加配置并开启自动注册后,启动服务后看到如下日志,说明服务注册成功完成自动注册服务:SPRING_BOOT_SERVICE,ip:192.168.1.8,端口:8222服务发现可以使用Nacos提供的NacosNamingService获取服务的实例,通过@在需要使用的地方注入NacosNamingServiceNacos注入注解。/***@authorlixiaoshuang*/@RestController@RequestMapping(path="springboot/nacos/discovery")publicclassNacosDiscoveryController{@NacosInjectedprivateNacosNamingServicenacosNamingService;@RequestMapping(path="get")publicListgetInfo(@RequestParam("serviceName")StringserviceName)throwsNacosException{returnnacosNamingService.getAllInstances(serviceName);}}调用http://localhost:8222/springboot/nacos/discovery/get?serviceName=SPRING_BOOT_SERVICE获取SPRING_BOOT_SERVICE服务的实例信息。