标签 spring 下的文章 - 酷游博客
首页
关于
友链
Search
1
阿里的简历多久可以投递一次?次数多了有没有影响?可以同时进行吗?
45 阅读
2
Java中泛型的理解
40 阅读
3
Java 14 发布了,再也不怕 NullPointerException 了!
38 阅读
4
Java中的可变参数
37 阅读
5
该如何创建字符串,使用" "还是构造函数?
29 阅读
技术
登录
/
注册
找到
11
篇与
spring
相关的结果
2025-01-22
SpringBatch配置多线程step
SpringBatch批处理框架默认使用单线程完成任务的执行,但是他提供了对线程池的支持。使用tasklet的task-executor属性可以很容易的将普通的step转成多线程的step。 task-executor:任务执行处理器,定义后采用多线程执行任务,需要考虑线程安全问题。 throttle-limit:最大使用线程池数目。 如果我们希望示例中的 billingStep 以并发方式执行,且并发任务数为 5,那么只需要做如下配置即可,见清单: Spring Core 为我们提供了多种执行器实现(包括多种异步执行器),我们可以根据实际情况灵活选择使用。 类名 描述 是否异步 SyncTaskExecutor 简单同步执行器 否 ThrottledTaskExecutor 该执行器为其他任意执行器的装饰类,并完成提供执行次数限制的功能 视被装饰的执行器而定 SimpleAsyncTaskExecutor 简单异步执行器,提供了一种最基本的异步执行实现 是 WorkManagerTaskExecutor 该类作为通过 JCA 规范进行任务执行的实现,其包含 JBossWorkManagerTaskExecutor 和 GlassFishWorkManagerTaskExecutor 两个子类 是 ThreadPoolTaskExecutor 线程池任务执行器 是 在多线程step中为了保证代码处理的正确性,要求所有在多线程step中处理的对象和操作必须都是线程安全的。但是SpringBatch框架提供的大部分的ItemReader、ItemWriter都不是线程安全的。所以需要自己保证多线程处理时候的线程安全。 那么,如何保证step的线程安全呢? 1.对reader的read方法使用synchronized关键字。 这种方式并不支持重启操作。当执行失败的时候并没有保存当前的状态数据导致无法知道哪些数据已经读取,哪些数据未读取。 多线程step提供了多个线程执行一个step的能力,但这种场景在实际业务中是用的并不是非常多。更多的是job中不同的step没有先后顺序,可以在执行期间并行的执行。SpringBatch提供了并行step的能力。可以通过split元素来定义并行的作业流。 参考资料:使用 Spring Batch 构建企业级批处理应用: 第 2 部分
技术
# spring
酷游
1月22日
0
15
0
2025-01-22
2020年排名前20的基于SpringBoot搭建的开源项目,帮你快速进行项目搭建!
SpringBoot一直是开发者比较青睐的一款轻量级框架,他不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。 现在很多Java系的软件开发都是基于SpringBoot的,这就要求开发人员都要掌握基于SpringBoot的开发。 由于SpringBoot体系非常庞大,导致很多人并不能完全掌握如何使用,尤其是涉及分布式相关的开发时,如何和其他框架整合更是让很多程序员无从下手。 最近,小编蹲点各大开源网站、社区等,终于被我找到了20款基于SpringBoot技术体系的一些开源框架。 这些项目大都具备一些很完善的功能,并且均采用了当下比较流行的技术栈。 无论是日常学习,还是当做自己项目搭建的脚手架,这20款开源项目都是非常合适的。(文末有所有项目的地址合集以及下载链接) mall 开源地址:https://github.com/macrozheng/mall star数:36.7k 作者:macrozheng  mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。 mall项目致力于打造一个完整的电商系统,采用现阶段流行技术实现:  vhr 开源地址:https://github.com/lenve/vhr star数:17.1k 作者:lenve  微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。 相关技术栈:  RuoYi 开源地址:https://gitee.com/y_project/RuoYi star数:13.9k 作者:若依  基于SpringBoot的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。 内置以下17个功能:  jeecg-boot 开源地址:https://github.com/zhangdaiscott/jeecg-boot star数:13.6k 作者:zhangdaiscott JeecgBoot 是一款基于代码生成器的J2EE快速开发平台!采用前后端分离架构:SpringBoot2.x,Ant Design&Vue,Mybatis-plus,Shiro,JWT。  强大的代码生成器让前后端代码一键生成,无需写任何代码! JeecgBoot引领新的开发模式(Online Coding模式-> 代码生成器模式-> 手工MERGE智能开发), 帮助解决Java项目70%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省成本,同时又不失灵活性!JeecgBoot还独创在线开发模式(No代码概念):在线表单配置(表单设计器)、移动配置能力、工作流配置(在线设计流程)、报表配置能力、在线图表配置、插件能力(可插拔)等等! pig 开源地址:https://gitee.com/log4j/pig star数:12.3k 作者:pig4cloud.com  pig是一个基于Spring Boot 2.3、 Spring Cloud Hoxton & Alibaba、 OAuth2 的RBAC 权限管理系统。 主要有以下特点: 基于 Spring Cloud Hoxton 、Spring Boot 2.3、 OAuth2 的RBAC权限管理系统 基于数据驱动视图的理念封装 element-ui,即使没有 vue 的使用经验也能快速上手 提供对常见容器化支持 Docker、Kubernetes、Rancher2 支持 提供 lambda 、stream api 、webflux 的生产实践 iBase4J 开源地址:https://gitee.com/iBase4J/iBase4J star数:9.2k 作者:iBase4J  iBase4J是Java语言的分布式系统架构。 使用Spring整合开源框架。 使用Maven对项目进行模块化管理,提高项目的易开发性、扩展性。 系统包括4个子系统:系统管理Service、系统管理Web、业务Service、业务Web。 系统管理:包括用户管理、权限管理、数据字典、系统参数管理等等。 可以无限的扩展子系统,子系统之间使用Dubbo或MQ进行通信。 技术选型如下:  MCMS 开源地址:https://gitee.com/mingSoft/MCMS star数:8.4k 作者:铭飞  基于SpringBoot 2架构,前端基于vue、element ui。每月28定期更新版本,为开发者提供上百套免费模板,同时提供适用的插件(文章、商城、微信、论坛、会员、评论、支付、积分、工作流、任务调度等…),一套简单好用的开源系统、一整套优质的开源生态内容体系。 项目开发环境要求: Windows、Linux Eclipse、Idea Mysql≧5.7 JDK≧8 Tomcat≧8 spring-boot-seckill 开源地址:https://gitee.com/52itstyle/spring-boot-seckill star数:7.6k 作者:小柒2012 这是一个从0到1构建的分布式秒杀系统。  秒杀架构:  spring-boot-pay 开源地址:https://gitee.com/52itstyle/spring-boot-pay star数:6.1k 作者:小柒2012 一个开源的支付服务,整合了支付宝,微信,银联详细代码案例;  SpringCloud 开源地址:https://github.com/zhoutaoo/SpringCloud star数:4.3k 作者:zhoutaoo  基于SpringCloud2.1的微服务开发脚手架,整合了spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway等。服务治理方面引入elasticsearch、skywalking、springboot-admin、zipkin等,让项目开发快速进入业务开发,而不需过多时间花费在架构搭建上。 该项目目前提供了用户管理、角色管理、服务容错、组织架构管理、API文档等功能。并且用到了很多当下流行的技术:  JSH_ERP 开源地址:https://gitee.com/jishenghua/JSH_ERP star数:3.8k 作者:季圣华  华夏ERP基于SpringBoot框架和SaaS模式,立志为中小企业提供开源好用的ERP软件,目前专注进销存+财务功能。主要模块有零售管理、采购管理、销售管理、仓库管理、财务管理、报表查询、系统管理等。支持预付款、收入支出、仓库调拨、组装拆卸、订单等特色功能。拥有库存状况、出入库统计等报表。同时对角色和权限进行了细致全面控制,精确到每个按钮和菜单。 技术框架: 核心框架:SpringBoot 2.0.0 持久层框架:Mybatis 1.3.2 日志管理:Log4j 2.10.0 JS框架:Jquery 1.8.0 UI框架: EasyUI 1.9.4 模板框架: AdminLTE 2.4.0 项目管理框架: Maven 3.2.3 gpmall 开源地址:https://github.com/2227324689/gpmall star数:3.5k 作者:2227324689  这是一个咕泡学院实战项目,该项目基于SpringBoot+Dubbo构建的电商平台,采用了微服务架构,项目采用前后端分离开发,前端需要独立部署。 据该项目文档介绍,该项目使用到了很多前后端技术:  oa_system 开源地址:https://gitee.com/aaluoxiang/oa_system star数:2.9k 作者:程序员二师兄  办公自动化(OA)是面向组织的日常运作和管理,员工及管理者使用频率最高的应用系统,极大提高公司的办公效率。oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目,mysql底层数据库,前端采用freemarker模板引擎,Bootstrap作为前端UI框架,集成了jpa、mybatis等框架。 主要的技术栈:  Guns 开源地址:https://github.com/stylefeng/Guns star数:2.9k 作者:stylefeng Guns基于SpringBoot 2,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + mybatis-plus + beetl!Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块,可以直接作为一个后台管理系统的脚手架!  该项目主要提供了以下10几个功能: 用户管理、角色管理、部门管理、菜单管理、字典管理 、业务日志、登录日志、监控管理、通知管理、职务管理、代码生成、在线参数配置 SpringBlade 开源地址:https://github.com/chillzhuang/SpringBlade star数:2.9k 作者:chillzhuang  SpringBlade 是一个由商业级项目升级优化而来的SpringCloud分布式微服务架构、SpringBoot单体式微服务架构并存的综合型项目,采用Java8 API重构了业务代码,完全遵循阿里巴巴编码规范。 采用Spring Boot 2 、Spring Cloud Hoxton 、Mybatis 等核心技术,同时提供基于React和Vue的两个前端框架用于快速搭建企业级的SaaS多租户微服务平台。 该项目架构也比较清晰,架构图如下:  mall-swarm 开源地址:https://github.com/macrozheng/mall-swarm star数:2.7k 作者:macrozheng  mall-swarm是一套微服务商城系统,采用了 Spring Cloud Greenwich、Spring Boot 2、MyBatis、Docker、Elasticsearch等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。 mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。文档齐全,附带全套Spring Cloud教程。 该套项目的代码组织结构如下:  zuihou-admin-cloud 开源地址:https://github.com/zuihou/zuihou-admin-cloud star数:2.3k 作者:zuihou 基于SpringCloud(Hoxton.SR3) + SpringBoot(2.2.6.RELEASE) 的SaaS 微服务脚手架,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API、分布式事务、大文件断点分片续传等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。  代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用Nacos、Fegin、Ribbon、Zuul、Hystrix、JWT Token、Mybatis、SpringBoot、Redis、RibbitMQ等主要框架和中间件。 该项目所涉及到的技术如下:  microservices-platform 开源地址:https://github.com/zlt2000/microservices-platform star数:1.8k 作者:zlt2000 基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。  真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提供应用管理方便第三方系统接入;同时还集合各种微服务治理功能和监控功能。 主要功能模块包括:企业级的认证系统、开发平台、应用监控、慢sql监控、统一日志、单点登录、Redis分布式高速缓存、配置中心、分布式任务调度、接口文档、代码生成等等。  Timo 开源地址:https://gitee.com/aun/Timo star数:1.3k 作者:小懒虫  TIMO后台管理系统,基于SpringBoot2.0 + Spring Data Jpa + Thymeleaf + Shiro 开发的后台管理系统,采用分模块的方式便于开发和维护,支持前后台模块分别部署,目前支持的功能有:权限管理、部门管理、字典管理、日志记录、文件上传、代码生成等,为快速开发后台系统而生的脚手架! 项目结构如下:  V-IM 开源地址:https://gitee.com/lele-666/V-IM star数:1.2k 作者:乐乐  基于JS的超轻量级聊天软件。前端:vue、iview、electron实现的 PC 桌面版聊天程序,主要适用于私有云项目内部聊天,企业内部管理通讯等功能,主要通讯协议websocket。支持web网页聊天实现。服务端: springboot、tio、oauth2.0等技术。界面:高仿微信。 主要功能:文本聊天、聊天表情、发送图片(http)、发送文件(http)、单聊、群聊、用户分组(后端支持)、离线消息(单聊)、聊天记录(单聊、群聊)、支持心跳检测,断线重连、使用SpringBoot security oauth2.0 支持单点登录、用户搜索等。 最后,因为收到微信的限制,文章内无法跳转到外部链接,所有的项目地址我已经都给大家准备好了。 并且有很多读者反馈自己通过GitHub下载资源比较慢,所以我也把这些资源提前下载好了,并且保存在网盘中,方便大家转存和下载。 大家可以在『Hollis』公众号,在后台对话回复:”项目”,即可获取所以项目地址及网盘下载链接。
技术
# spring
酷游
1月22日
0
7
0
2025-01-22
SpringBoot 3.0正式发布,有这几个新变化!
最近几天,Spring有了重大更新,而且更新的很频繁,相继推出了Spring Framework 6.0和SpringBoot 3.0。 Spring把这次升级称之为新一代框架的开始,下一个10年的新开端,口号喊的挺响亮,但是很多人在看过相关的Release Note之后,表示并不买账。 最近发布之后,有很多网上的资料也都发了相关介绍,但是很多文章都是直接翻译的官方的发布公告。主要更新就是以下几个: A Java 17 baseline Support for Jakarta EE 10 with an EE 9 baseline Support for generating native images with GraalVM, superseding the experimental Spring Native project Ahead-Of-Time transformations and the corresponding AOT processing support for Spring application contexts 首先,前两个比较容易理解,主要说的是依赖的服务的版本升级的信息,那就是Spring Framework 6.0和SpringBoot 3.0都要求JDK的版本最低也得是JDK 17;并且底层依赖的J2EE也迁移到了Jakarta EE 9。 虽然JDK 17有很多新的特性,并且也是目前最新的一个LTS版本。 但是其实真正的使用比较多的版本还是JDK 1.8,而Spring彻底抛弃17之前的所有版本!!! AOT编译 Ahead-Of-Time,即预先编译,这是相对于我们熟知的Just-In-Time(JIT,即时编译)来说的。 相比于JIT编译,AOT指的是在程序运行前编译,这样就可以避免在运行时的编译性能消耗和内存消耗,可以在程序运行初期就达到最高性能、也可以显著的加快程序的启动。 AOT的引入,意味着Spring生态正式引入了提前编译技术,相比于JIT编译,AOT有助于优化Spring框架启动慢、占用内存多、以及垃圾无法被回收等问题。 Spring Native 在Spring的新版本中引入了Spring Native。 有了Spring Native ,Spring可以不再依赖Java虚拟机,而是基于 GraalVM 将 Spring 应用程序编译成原生镜像(native image),提供了一种新的方式来部署 Spring 应用。这种部署Spring的方式是云原生友好的。 SpringNative的优点是编译出来的原生 Spring 应用可以作为一个独立的可执行文件进行部署,而不需要安装JVM,而且启动时间非常短、并且有更少的资源消耗。他的缺点就是构建时长要比JVM更长一些。 其他的,感觉也就没啥重要的东西了,针对最近频繁的升级你怎么看?你准备升级吗?
技术
# spring
酷游
1月22日
0
22
0
2025-01-22
Spring Cloud Feign 自定义配置(重试、拦截与错误码处理) 实践
本文来自读者投稿,原作者——上帝爱吃苹果,人在魔都,目前为贝壳做事,本篇文章主要分享下 Feign 自定义配置的工程实践,希望你们可以找到些有用的东西 基于 spring-boot-starter-parent 2.1.9.RELEASE, spring-cloud-openfeign 2.1.3.RELEASE 引子 Feign 是一个声明式、模板化的HTTP客户端,简化了系统发起Http请求。创建它时,只需要创建一个接口,然后加上FeignClient注解,使用它时,就像调用本地方法一样,作为开发者的我们完全感知不到这是在调用远程的方法,也感知不到背后发起了HTTP请求: /** * @author axin * @suammry xx 客户端 */ @FeignClient(value = "xxClient",url = "${xx.host:www.axin.com}") public interface DemoClient { @PostMapping(value = "/xxx/url", headers = "Content-Type=application/json"}) yourResponse requestHTTP(@RequestBody JSONObject param); } 上述的代码就是一个定义一个Feign HTTP 客户端,在其他类中只需要 @Autowired DemoClient,就可以像调用本地方法一样发起HTTP请求。 介绍就到这,接下来进入主题,因为 FeignClient 将发起HTTP请求与解析返回报文都做了包装,如果你的业务场景需要定制一些调用机制,比如: 1. 我想在发起请求响应超时失败时自动重试 —— 自定义重试机制 2. 我想单独对某些异常的HTTP状态码特殊处理 —— 自定义ErrorDecoder 3. 服务端接口需要验证签名,所以我方在发起请求时要生成签名然后传过去 —— 定义 Fegin 拦截器 基于此,本文就以上述3个需求场景为例来介绍如何自定义 FeignClient 的配置 FeignClient的默认配置类 Feign Client 默认的配置类为 FeignClientsConfiguration, 这个类在 spring-cloud-netflix-core 的 jar 包下。 默认注入了很多 Feign 相关的配置Bean,包括FeignRetryer、 FeignLoggerFactory 和 FormattingConversionService 等。另外,Decoder、Encoder和 Contract 这3个类在没有Bean被注入的情况下,会自动注入默认配置的 Bean,即ResponseEntity Decoder、SpringEncoder 和 SpringMvcContract。 如果你不知道如何自己定义配置时,不放点进去看看人家默认配置是如何实现的。这里就不晒源码了。 FeignClient 注解参数 每个注解参数都做了注释,详情请见下方源码: @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FeignClient { /** * 指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现 */ @AliasFor("name") String value() default ""; @Deprecated String serviceId() default ""; @AliasFor("value") String name() default ""; /** * Sets the @Qualifier value for the feign client. * 这个bean在应用上下文中的名字为接口的全限定名,你也可以使用 @FeignClient 注解中的 qualifier 属性给bean指定一个别名 */ String qualifier() default ""; /** * url地址 */ String url() default ""; /** * 当发生404错误,如果该字段为true,会调用decoder进行解码,否则抛出FeignException */ boolean decode404() default false; /** * 指定FeignClient 的配置类,优先级最高,默认的配置类为 FeignClientsConfiguration类 */ Class[] configuration() default {}; /** * 配置熔断器的处理类 */ Class fallback() default void.class; /** * 工厂类,用于生产fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复代码 */ Class fallbackFactory() default void.class; /** * 定义统一的路径前缀 */ String path() default ""; /** * Whether to mark the feign proxy as a primary bean. Defaults to true. */ boolean primary() default true; } 自定义Feign配置类 在 Spring Cloud 中,你可以通过 @FeignClient 注解声明额外的配置(比 FeignClientsConfiguration 级别高)去控制feign客户端,以一开始的feign接口为例: /** * @author axin * @suammry xx 客户端 */ @FeignClient(value = "xxClient",url = "${xx.host:www.axin.com}",configuration = MyConfiguration.class) public interface DemoClient { @PostMapping(value = "/xxx/url", headers = "Content-Type=application/json"}) yourResponse requestHTTP(@RequestBody JSONObject param); } 在上面这个示例中,feign客户端在MyConfiguration中的配置将会覆盖FeignClientsConfiguration中的配置。 要注意的是: MyConfiguration不需要使用@Configuration注解。如果加上了,它将全局生效。 Retryer-重试机制的自定义 /** * @author axin * @summary fegin 客户端的自定义配置 */ public class MyConfiguration { /** * 自定义重试机制 * @return */ @Bean public Retryer feignRetryer() { //fegin提供的默认实现,最大请求次数为5,初始间隔时间为100ms,下次间隔时间1.5倍递增,重试间最大间隔时间为1s, return new Retryer.Default(); } } ErrorDecoder-错误解码器的自定义 当feign调用返回HTTP报文时,会触发这个方法,方法内可以获得HTTP状态码,可以用来定制一些处理逻辑等等。 /** * @author axin * @summary fegin 客户端的自定义配置 */ @Slf4j public class MyConfiguration { /** * 自定义重试机制 * @return */ @Bean public Retryer feignRetryer() { //最大请求次数为5,初始间隔时间为100ms,下次间隔时间1.5倍递增,重试间最大间隔时间为1s, return new Retryer.Default(); } @Bean public ErrorDecoder feignError() { return (key, response) -> { if (response.status() == 400) { log.error("请求xxx服务400参数错误,返回:{}", response.body()); } if (response.status() == 409) { log.error("请求xxx服务409异常,返回:{}", response.body()); } if (response.status() == 404) { log.error("请求xxx服务404异常,返回:{}", response.body()); } // 其他异常交给Default去解码处理 // 这里使用单例即可,Default不用每次都去new return new ErrorDecoder.Default().decode(key, response); }; } } 采用了lambda的写法,response变量是Response类型,通过status()方法可以拿到返回的HTTP状态码,body()可以获得到响应报文。 Feign拦截器实践 拦截器在请求发出之前执行,在拦截器代码里可以修改请求参数,header等等,如果你有签名生成的需求,可以放在拦截器中来实现 /** * @author axin * @summary fegin 客户端的自定义配置 */ @Slf4j public class MyConfiguration { /** * 自定义重试机制 * @return */ @Bean public Retryer feignRetryer() { //最大请求次数为5,初始间隔时间为100ms,下次间隔时间1.5倍递增,重试间最大间隔时间为1s, return new Retryer.Default(); } @Bean public ErrorDecoder feignError() { return (key, response) -> { if (response.status() == 400) { log.error("请求xxx服务400参数错误,返回:{}", response.body()); } if (response.status() == 409) { log.error("请求xxx服务409异常,返回:{}", response.body()); } if (response.status() == 404) { log.error("请求xxx服务404异常,返回:{}", response.body()); } // 其他异常交给Default去解码处理 // 这里使用单例即可,Default不用每次都去new return new ErrorDecoder.Default().decode(key, response); }; } /** * fegin 拦截器 * @return */ @Bean public RequestInterceptor cameraSign() { return template -> { // 如果是get请求 if (template.method().equals(Request.HttpMethod.GET.name())) { //获取到get请求的参数 Map queries = template.queries(); } //如果是Post请求 if (template.method().equals(Request.HttpMethod.POST.name())) { //获得请求body String body = template.requestBody().asString(); JSONPObject request = JSON.parseObject(body, JSONPObject.class); } //Do what you want... 例如生成接口签名 String sign = "根据请求参数生成的签名"; //放入url?之后 template.query("sign", sign); //放入请求body中 String newBody = "原有body" + sign; template.body(Request.Body.encoded(newBody.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8)); }; } } 可以看到代码中给了如何获取请求参数和修改请求参数的示例。 总结 小结一下,对于开头提出的场景: 1. 我想在发起请求响应超时失败时自动重试 —— 自定义重试机制 2. 我想单独对某些异常的HTTP状态码特殊处理 —— 自定义ErrorDecoder 3. 服务端接口需要验证签名,所以我方在发起请求时要生成签名然后传过去 —— 定义 Fegin 拦截器 给出了自定义 feign 配置的方式实现的样例代码,希望对你有用,如果有更好的方式简化HTTP请求,欢迎留言分享~ 参考链接 重新定义Spring Cloud实战 Spring Cloud Netflix官方文档
技术
# spring
酷游
1月22日
0
12
0
2025-01-22
Spring Cloud 2022发布,这几个组件要移除了!
继SpringBoot 3.0和SpringFramework 6.0之后,Spring Cloud 终于也推出了新版本——2022.0.0,官网把这个版本命名为Kilburn。 目前在Maven仓库中已经可以下载使用了,通过BOM文件即可依赖到项目中: org.springframework.cloud spring-cloud-dependencies 2022.0.0 pom import 最低依赖 Spring Cloud 2022.0.0是构建在Spring Framework 6.0和Spring Boot 3.0 之上的一个主要版本。所以,他对JDK要求同样是最低需要是Java 17,对J2EE的要求最低需要Jakarta EE 9。 组件升级 Spring Cloud 2022.0.0中的组件版本如下: 移除CLI 和 Cloudfoundry 本次升级中,移除了Spring Cloud CLI 和 Spring Cloud Cloudfoundry 这两个模块。 Spring Boot CLI是一个命令行工具,用于使用Spring快速开发。 它允许运行Groovy脚本,Groovy脚本类似于没有任何样板代码的java代码。 Spring CLI有助于引导新项目或编写自定义命令。 Spring Cloud for Cloudfoundry可以轻松地在Cloud Foundry 中运行Spring Cloud应用程序。 Cloud Foundry具有“服务”的概念,即“绑定”到应用程序的中间件,实质上为其提供包含凭据的环境变量。 增加对AOT和Native的支持 在《SpringBoot 3.0正式发布,有这几个新变化!》我们介绍过,Spring Boot 3.0 中两个重要的升级就是开始支持AOT编译和引入了Spring Native。 在本次升级的SpringCloud 2.0.0中,多个组件也都增加了对AOT和Native的支持,如Spring Cloud Function、Spring Cloud Stream、Spring Cloud OpenFeign、Spring Cloud Commons、Spring Cloud Consul以及Spring Cloud Gateway等。 其中有多个组件的本次升级,主要做的也是 “Added support for AOT & native”! OpenFeign 将不再添加新功能 由于Spring现在提供了自己的接口HTTP客户端解决方案,从2022.0.0开始,Spring Cloud OpenFeign将被视为功能完整。这意味着Spring Cloud团队将不再向模块添加新特性。只会修复bug和安全问题。 在2022.0.0中,对OpenFeign也做了一些优化和升级: OAuth2的支持迁移到Spring Security OAuth2客户端 feign.autoconfiguration.jackson.enabled 默认值修改为true Jackson Autoconfiguration默认设置为开启 移除了之前被废弃的构造函数和方法 为了与Spring Framework中的变化保持一致,已经删除了对Apache HttpClient 4的支持,将使用Apache HttpClient 5替代。 增加了对AOT和原生镜像的支持,因为AOT编译和Spring Native是Spring Framework 6.0中的重要升级。 升级到 Feign 12.0 也许在下一个重要版本中,Spring Cloud OpenFeign可能也要被移除了。 Netflix升级Eureka 2.0.0 更新到Eureka 2.0.0,Eureka 2.0.0 是 Eureka 的一个新分支,与 7 年前的旧 2.x-archive 分支实验无关。新的 2.x 分支是为了与 JakartaEE 兼容,这也使得 Spring Cloud Netflix 与 Spring Framework 6.0 和 Spring Boot 3.0 兼容。 同时,本次版本升级还迁移Apache HttpClient到Apache HC5 HttpClient。 总结 以上,主要帮大家整理了新发布的Spring Cloud 2022.0.0的新特性,其实可以看到,主要做的是对Spring Framework 6.0和SpringBoot 3.0的兼容。 在编写这篇文章的时候,我特意去看了一下Spring Cloud Alibaba,Spring Cloud AWS,Spring Cloud Tencent 等项目的是否也随之进行了更新。结果发现Spring Cloud Alibaba和Spring Cloud AWS的文档中已经有了相关说明。 图:Spring Cloud Alibaba 的README PS:不过我发现个笔误:英文版的readme中把Spring Cloud 2022写成了Spring 2022,中文版的则是正确的。 图:Spring Cloud AWS 的README 那么问题来了,Spring新版本对JDK的最低版本要求是Java 17,那么,你准备升级吗? 参考资料: https://spring.io/projects/spring-cloud https://github.com/awspring/spring-cloud-aws https://github.com/alibaba/spring-cloud-alibaba
技术
# spring
酷游
1月22日
0
3
0
1
2
3
下一页
易航博客