最近想体验一下最新版的SpringBoot。浏览官网后发现SpringBoot最新版本已经是2.6.4了,版本更新确实够快。之前的项目升级到2.6.4版本后,发现坑很多,不仅是循环依赖的问题,连Swagger都不能用!今天就给大家分享升级过程,填这些坑!SpringBoot实战电商项目商城(50k+star)地址:https://github.com/macrozheng/mall说说SpringBoot版本首先说说SpringBoot的版本。最新版本是2.6.4,2.7.x即将发布,2.4.x及以下版本已经停止维护,目前主流版本应该是2.5.x和2.6.x。详情见下表。升级过程接下来我们将之前的mall-tiny-swagger项目进行升级,看看有哪些坑,如何解决!添加依赖首先修改pom.xml中SpringBoot的版本号。注意,从2.4.x版本开始,SpringBoot不再使用.RELEASE后缀。org.springframework.bootspring-boot-starter-parent2.6.4启动循环依赖的项目后,我们会遇到第一个问题,因为SpringBoot禁止循环引用。SecurityConfig和umsAdminServiceImpl被循环引用。具体日志如下;具体来说,我们的SecurityConfig引用了UmsAdminService;UmsAdminServiceImpl引用PasswordEncoder;由于SecurityConfig继承了WebSecurityConfigurerAdapter,而Adapter引用了PasswordEncoder,这就导致了循环引用。解决这个问题其实很简单,可以修改application.yml直接允许循环引用,但是这个方法有点粗糙,没有其他方法的时候可以使用;spring:main:allow-circular-references:true其实循环引用主要是因为会导致Spring不知道应该创建哪个Bean才会被禁用,我们可以使用@Lazy注解指定一个Bean用于lazy加载来优雅的解决这个问题,比如在SecurityConfig中懒加载UmsAdminService。启动报错再次启动SpringBoot应用后,会出现空指针异常。一看就是Swagger的问题。本来很好用的Swagger不能用了!在Swagger的配置类中加入如下Bean可以解决这个问题;/***Swagger2API文档配置*/@ConfigurationpublicclassSwagger2Config{@BeanpublicstaticBeanPostProcessorspringfoxHandlerProviderBeanPostProcessor(){returnnewBeanPostProcessor(){@ialOverridepublicObjectpostProcessAfter(Objectbean,StringbeanName)throwsBeansException{if(beaninstanceofWebMvcRequestHandlerProvider||beaninstanceofWebFluxRequestHandlerProvider){customizeSpringfoxHandlerMappings(getHandlerMappings(bean));}返回豆;}privatevoidcustomizeSpringfoxHandlerMappings(Listmappings){Listcopy=mappings.溪流()。过滤器(映射->映射。getPatternParser()==null).collect(Collectors.toList());映射.clear();mappings.addAll(复制);}@SuppressWarnings("unchecked")privateListgetHandlerMappings(Objectbean){try{Fieldfield=ReflectionUtils.findField(bean.getClass(),"handlerMappings");field.setAccessible(true);返回(List)field.get(bean);}catch(IllegalArgumentException|IllegalAccessExceptione){thrownewIllegalStateException(e);}};}}文档无法显示。重启后,访问Swagger文档,会发现之前好的文档无法显示了。访问地址:http://localhost:8088/swagger...修改application.yml文件,MVC默认路径匹配策略为PATH_PATTERN_PARSER,需要改为ANT_PATH_MATCHER;spring:mvc:pathmatch:matching-strategy:ANT_PATH_MATCHER重启后发现Swagger可以正常使用!说起springfox,就提到Swagger。我们一般在SpringBoot中集成springfox提供的工具库。看了官网,该项目快两年没有发布新版本了。我们看一下Maven仓库中的版本。停留在之前的3.0.0版本。如果没有新版本的springfox,估计随着SpringBoot版本的更新,兼容性会越来越差!综上所述,今天带大家体验了下SpringBoot升级到2.6.x版本的过程,主要解决了循环依赖和Swagger不能用的问题。希望对大家有所帮助!如果想进一步了解SpringBoot的实战技巧,可以试试这个实战项目,全套教程(50K+Star):https://github.com/macrozheng/mall参考官网地址:https://github.com/springfox/...项目源码地址https://github.com/macrozheng...