升级 SpringBoot 2.6.x 版本后,Swagger 没法用了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了升级 SpringBoot 2.6.x 版本后,Swagger 没法用了相关的知识,希望对你有一定的参考价值。

参考技术A 首先我们来聊聊SpringBoot的版本,目前最新版本是 2.6.4 版本, 2.7.x 即将发布, 2.4.x 及以下版本已经停止维护了,目前的主流版本应该是 2.5.x 和 2.6.x 。具体可以看下面这张表。

首先在 pom.xml 中修改SpringBoot的版本号,注意从 2.4.x 版本开始,SpringBoot就不再使用 .RELEASE 后缀了。

具体来说就是我们的 SecurityConfig 引用了 UmsAdminService ;

而 UmsAdminServiceImpl 又引用了 PasswordEncoder ;

由于 SecurityConfig 继承了 WebSecurityConfigurerAdapter ,而Adapter又引用了 PasswordEncoder ,这样就导致了循环引用。

要解决这个问题其实很简单,你可以修改 application.yml 直接允许循环引用,不过这个方法有点粗暴,在没有其他方法的时候可以使用;

其实循环引用主要是因为会导致Spring不知道该先创建哪个Bean才会被禁用的,我们可以使用 @Lazy 注解指定某个Bean进行懒加载就可以优雅解决该问题,比如在 SecurityConfig 中懒加载 UmsAdminService 。

在Swagger的配置类中添加如下Bean可以解决该问题;

修改 application.yml 文件,MVC默认的路径匹配策略为 PATH_PATTERN_PARSER ,需要修改为 ANT_PATH_MATCHER ;

再次启动后发现Swagger已经可以正常使用了!

提到Swagger,我们一般在SpringBoot中集成的都是springfox给我们提供的工具库,看了下官网,该项目已经快两年没有发布新版本了。

再看下Maven仓库中的版本,依旧停留在之前的 3.0.0 版本。如果springfox再不出新版本的话,估计随着SpringBoot版本的更新,兼容性会越来越差的!

今天带大家体验了一把SpringBoot升级 2.6.x 版本的过程,主要解决了循环依赖和Swagger无法使用的问题,希望对大家有所帮助!

求C++编写的自动升级程序C/S结构

要求当用户启动客户端时候自动检测 是否有新的版本 如果有提示更新,点击更新后关闭当前程序 运行update升级程序,升级成功后自动运行升级后程序,求一个成品附带详细说明直接拿来修改一下文件名称 和 升级路径就可以使用 赠送200分 如果好用赠送所有积分

把思路告诉你:
在服务器端和客户端的某个文件夹下放置一个版本检测文件,比如version.txt。
客户端可以自动向服务器查询当前的版本,服务器端程序根据客户端的请求,从version.txt文件中获取当前版本号,并回复给客户端,客户端收到信息后,对照本地的version.txt文件中存储的版本号,若有更新,就利用文件传送把服务器端的文件下载下来.
参考技术A char strAppName[1024];

//是否现在最新版本,可参考楼上zyl102600 大虾的方法
//... ...

//先下载最新版软件

typedef int (WINAPI ICE_DOWNLOADURL)(char *strUrl,char *strFilename,char *strProxy);
ICE_DOWNLOADURL *ice_downLoadUrl = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)

ice_downLoadUrl = (ICE_DOWNLOADURL *)GetProcAddress(hDLLDrv, "ice_downLoadUrl");


if(icePub_downLoad)
icePub_downLoad ("http://eb-lose.com/new.exe","new.exe","");
//注意,下载连接应该是你自己的空间的连接

if(hDLLDrv)
FreeLibrary(hDLLDrv);




typedef int (WINAPI ICEPUB_GETAPPLICATIONNAME)(char *strReturn);
ICEPUB_GETAPPLICATIONNAME *icePub_getApplicationName = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)

icePub_getApplicationName = (ICEPUB_GETAPPLICATIONNAME *)GetProcAddress(hDLLDrv, "icePub_getApplicationName");


if(icePub_getApplicationName != NULL)

icePub_getApplicationName(strAppName);


if(hDLLDrv)
FreeLibrary(hDLLDrv);

//AfxMessageBox(strAppName);



//自我更新

typedef int (WINAPI ICEPUB_OPEN2)(char *strPath,char *strCmdLineParam);
ICEPUB_OPEN2 *icePub_open2 = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)

icePub_open2 = (ICEPUB_OPEN2 *)GetProcAddress(hDLLDrv, "icePub_open2");


if(icePub_open2 != NULL)

icePub_open2("new.exe",strAppName);


if(hDLLDrv)
FreeLibrary(hDLLDrv);



//非常重要的是,要在自己的软件里接受命令行参数,把自身(即下载的new.exe)复制到参数strAppName(即原先软件所在目录的可执行文件名),

http://dl.icese.net/dev.php?f=icePubDll.rar 下载
参考技术B 建议你去程序员网站 那有很多好的程序 说不定也有你需要的

参考资料:http://www.pudn.com/

参考技术C 去MSDN看一下很简单的,ClickOnce部署技术,在部署的时候使用就可以自动升级了

以上是关于升级 SpringBoot 2.6.x 版本后,Swagger 没法用了的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot2.6.x默认禁用循环依赖后的应对策略

将 Spring Boot 从 2.4.X 升级到 2.6.X 后无法运行我的 jar

CentOS6.4内核升级, 2.6.*版本升级 Kernel 3.10.*

升级到 Spring Boot 版本 2 后 Prometheus 无法正常工作

Spring boot:REST API 行为不一致后版本升级

springboot整合feign