1 前言
前文中已经分享了 springboot3.0
升级实践,在本文中将继续以此为基础介绍一个微服务的项目架构如何搭建以及一些新的知识点。技术的迭代日新月异,需要随时保持学习的心态和最新的技术知识储备。在本文中将以Springcloud Alibaba + jdk17 + Nacos2.x
为基础创建微服务项目,在这个创建和开发过程中会遇到新的问题,会总结一些开发的实践经验分享给大家。
2 项目搭建
在前文springboot 3.0项目升级实践 已经列举了项目所需要的依赖和环境,在这里就不再详述,在项目搭建时,可以使用阿里云的项目生成链接来生成项目,简便快捷的生成项目所需要的基本依赖。
makefile
代码解读
复制代码
# 生成项目
https://start.aliyun.com/
# 这里介绍一下项目依赖所使用的版本
-- springboot 和 spring-cloud-alibaba 对应的版本
spring-boot-dependencies:3.0.2
spring-cloud-alibaba-dependencies:2022.0.0.0-RC2
-- 项目文档 swagger
springdoc-openapi-starter-webmvc-ui:2.2.0
spring-boot-starter-validation:3.0.2
mybatis-plus-boot-starter:3.5.6
-- 需要添加nacos和loadbalancer以及openfeign
spring-cloud-starter-alibaba-nacos-discovery:2022.0.0.0-RC2
spring-cloud-starter-loadbalancer:4.0.5
spring-cloud-starter-openfeign:4.1.0
mysql-connector-java:8.0.32
hutool-all:5.8.28
项目的配置文件如下图所示,使用 application.yml(properties)
均可,但是不能使用 bootstrap
配置文件。在 nacos
的高版本中,已经采用的 grpc
的通信模式,所以要采用客户端和服务端一致的版本才能保证项目成功启动。
微服务项目与单体的 springboot
项目配置的大体相同,只是添加了服务的自动注册,以及发现其他服务的进行远程调用。
在项目开发过程中,最大的改变就是 jdk17
的变化,包路径的变化以及一些新的语法糖,使得开发者更加专注于业务开发,更好的完成编程实践。
3 项目实践
在项目开发中有以下特性,在开发和调试过程中都很方便:
文本块 Text Blocks
自 jdk15 以及之后,引入了文本块,这是一种定义多行字符串的解决方案,在 python 中也有文本块,用法都是以 """
开头或者结尾即可,这样的方式简化了多行字符串的实现方式,对于 sql,json,html 提高了可读性,具体的使用如下所示:
NPE,空指针增强
空指针异常在开发和调试过程中非常常见,但是输出的异常堆栈信息无法确定是哪个对象出现了问题,在 jdk17 之后,出现空指针问题就可以定位到问题的源头,如下所示即具体到相应的对象和字段。对于发现和解决问题提供了很大的帮助,
模式匹配
在传统的Java版本中,我们通常使用instanceof结合类型转换来对对象进行类型判断和处理,而这往往导致代码冗长。在JDK17
中,引入了模式匹配用来增强 instanceof
表达式的功能。使用了更简洁、高效的语法,在类型检查和类型转换的场景下使用更加方便。
如下图所示,我们可以使用模式变量一次性完成类型检查和类型转换。
4 踩坑集
在项目开发过程中,也遇到了下列的问题:
InaccessibleObjectException
jdk17 中使用 BeanCopier
进行对象 copy
时,会报如下错误,目前在项目中添加参数不能解决这个问题,在复制对象时,可以使用 json 序列化与反序列化的方式或者使用 BeanUtils
(apache spring工具类均可)来解决。
IllegalArgumentException
定义 Feign
接口时,如下图所示,在新版本的 SpringCloud
中增加了契约验证,在接口上@RequestMapping
和 @FeignClient
不能同时存在,所以需要将接口路径放置在每个接口类上的方法,才能保证项目启动不报错。
java
代码解读
复制代码
IllegalArgumentException: @RequestMapping annotation not allowed on @FeignClient interfaces
5 总结
本文介绍了 Springcloud Alibaba + jdk17 + nacos
的项目搭建实践,在这个过程中介绍了项目搭建的注意事项,同时也介绍了一下新的内容和项目启动遇到的坑,希望对大家有借鉴和参考意义。本文中所涉及的代码已经上传至 gitee
, 欢迎交流学习。项目地址 fortunecloud。