Springcloud Alibaba + jdk17+nacos 项目实践

简介: 本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。

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


转载来源:https://juejin.cn/post/7393606971893841972

相关文章
|
7月前
|
应用服务中间件 Nacos nginx
黑马头条_SpringCloud项目阶段一:环境搭建(Mac版本)
本文为 Mac 用户介绍微服务项目环境搭建,含阿里云服务器用 Docker 装 Nacos 1.2.0,本地通过 brew 装 OpenJDK 8、Maven 3.6.1、Redis,Docker 部署 MySQL 5.7 并配字符集,及 Nginx 安装与反向代理设置,附命令与配置步骤。
409 4
黑马头条_SpringCloud项目阶段一:环境搭建(Mac版本)
|
11月前
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
527 41
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
4808 14
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
4909 2
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
1488 4
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
4005 8
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
509 1