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

相关文章
|
3月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
2月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
2月前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
3月前
|
人工智能 前端开发 Java
Spring Cloud Alibaba AI,阿里AI这不得玩一下
🏀闪亮主角: 大家好,我是JavaDog程序狗。今天分享Spring Cloud Alibaba AI,基于Spring AI并提供阿里云通义大模型的Java AI应用。本狗用SpringBoot+uniapp+uview2对接Spring Cloud Alibaba AI,带你打造聊天小AI。 📘故事背景: 🎁获取源码: 关注公众号“JavaDog程序狗”,发送“alibaba-ai”即可获取源码。 🎯主要目标:
107 0
|
2月前
|
负载均衡 算法 Nacos
SpringCloud 微服务nacos和eureka
SpringCloud 微服务nacos和eureka
67 0
|
4月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
134 1
|
4月前
|
人工智能 前端开发 Java
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
本文介绍了如何使用 **Spring Cloud Alibaba AI** 构建基于 Spring Boot 和 uni-app 的聊天机器人应用。主要内容包括:Spring Cloud Alibaba AI 的概念与功能,使用前的准备工作(如 JDK 17+、Spring Boot 3.0+ 及通义 API-KEY),详细实操步骤(涵盖前后端开发工具、组件选择、功能分析及关键代码示例)。最终展示了如何成功实现具备基本聊天功能的 AI 应用,帮助读者快速搭建智能聊天系统并探索更多高级功能。
1464 2
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
|
5月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
15020 33
|
6月前
|
人工智能 Java Spring
使用 Spring Cloud Alibaba AI 构建 RAG 应用
本文介绍了RAG(Retrieval Augmented Generation)技术,它结合了检索和生成模型以提供更准确的AI响应。示例中,数据集(包含啤酒信息)被加载到Redis矢量数据库,Spring Cloud Alibaba AI Starter用于构建一个Spring项目,演示如何在接收到用户查询时检索相关文档并生成回答。代码示例展示了数据加载到Redis以及RAG应用的工作流程,用户可以通过Web API接口进行交互。
52611 69
|
4月前
|
Java 微服务 Spring
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
文章介绍了如何利用Spring Cloud Alibaba快速构建大型电商系统的分布式微服务,包括服务限流降级等主要功能的实现,并通过注解和配置简化了Spring Cloud应用的接入和搭建过程。
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】