这段时间一直在工作和学习,感觉技术更新换代实在是太快了,只要不跟进学习,很快就会被时代淘汰,当然这段时间也抽空参加了几场面试,虽然不算是大厂,但也算是中等厂商了,面试的技术点和我两年前的面试技术点早已经是完全不同了,所以建议最近想要换工作的小伙伴,千万不要裸辞,同时也要提前看一些面试题,积累一些经验后在出去试试。
话不多说,接下来进入本文正题,因为当前所负责的项目接触到了阿里的nacos,对于这款阿里开源的,既能当注册中心,又能当配置中心的组件,很感兴趣,因此就自己动手,搭建了一个简单的springboot项目整合nacos的工程,在没有做之前,我特意上网百度了一番,发现步骤清晰,操作简单,十来分钟就能搞定的那种,但是当我真正自己动手的时候,才发现里面的坑也不少,整合了一个下午的时间才全部搞定,这里就记录一下,也给没有接触过的小伙伴一个完整的介绍。
第一步:首先你得有一个springboot项目,同时也要事先安装好nacos,安装步骤非常简单,从github上下载下来后,直接打开运行即可,可谓是开箱即用,这点做的非常棒,体验感很好,值得我们这些写代码的学习。
第二步:这里就进入到了一个小坑中了,关于nacos,其官方文档中有两个不同版本的整合方法,第一个是整合springboot,第二个是整合springcloud,这二者所依赖的jar包也是不一样的,因此要确定好自己的项目究竟是一个springboot的单体架构,还是一个springcloud的微服务架构。
1、当使用springboot版本的jar包时,使用nacos作为配置中心的时候,除了bootstrap配置文件里的必要配置外,还需要在启动类上增加一个注解@NacosPropertySource,
@SpringBootApplication @NacosPropertySource(dataId = "example", autoRefreshed = true) public class DemoConfigApplication { public static void main(String[] args) { SpringApplication.run(DemoConfigApplication.class, args); } }
这个注解主要有两个参数,一个是dataId,主要是服务在nacos的命名空间中配置的dataId,另一个参数autoRefreshed主要是设置是否实时更新配置用的;当使用nacos作为注册中心的时候,除了bootstrap配置文件里的必要配置外,还需要自己手动去写一个方法,将该服务注册到naocs中,这个方法必须在服务启动时就进行调用,一般为了方便可以直接写在springboot项目的启动类中。完成了以上两步,springboot版本的整合nacos算是大功告成了。
@NacosInjected private NamingService namingService; @RequestMapping(value = "/get", method = GET) @ResponseBody public List<Instance> get(@RequestParam String serviceName) throws NacosException { return namingService.getAllInstances(serviceName); }
springboot版本的整合nacos配置jar包:
<!-- nacos作为配置中心 --> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> </dependency> <!-- nacos作为注册中心 --> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-discovery-spring-boot-starter</artifactId> </dependency>
2、当使用springcloud版本的jar包时,使用nacos作为配置中心的时候,配置完bootstarp文件内的信息后,就没有必要在springboot的启动类上增加什么注解了,如果需要nacos配置项能够实时更新这一功能,那么只需要在使用到nacos配置的java文件上增加一个注解即可@RefreshScope;
@RefreshScope public class DemoController{ }
当使用nacos作为注册中心的时候,除了bootstrap配置文件里的必要配置外,只需要在springboot的启动类上增加一个注解即可@EnableDiscoveryClient。完成了以上两步,springcloud版本的整合nacos算是大功告成了。
@SpringBootApplication @EnableDiscoveryClient public class NacosProviderApplication { public static void main(String[] args) { SpringApplication.run(NacosProviderApplication.class, args); } }
springcloud版本的整合nacos配置jar包:
<!-- nacos配置中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!-- nacos注册中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-commons</artifactId> </dependency>
bootstrap.properties配置文件中的配置内容:
#项目名称 spring.application.name=demo #######################配置中心配置################################# # 配置中心的地址 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 # 配置的分组名称 spring.cloud.nacos.config.group=dev
第三步:这里就进入了一个大坑中,也就是因为这个坑,所以我才浪费了那么长的时间,那就是springboot的版本于nacos版本之间的冲突问题,这点尤其需要注意,因为一旦没有注意这一点,项目启动时就会报各种各样奇奇怪怪的错误,一开始我用了最新版的springboot和最新版的nacos版本,结果后来发现nacos版本的更新速度低于springboot版本,因此最新版的nacos版本无法适配最新版的springboot版本,最后只能降低springboot版本,这才让项目顺利的跑起来。
最后把我搭建的这个简单demo的地址发出来,欢迎大家多多评价和点赞,谢谢大伙。
项目地址:https://github.com/hyqlb/bin.git