升级 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 没法用了的主要内容,如果未能解决你的问题,请参考以下文章
将 Spring Boot 从 2.4.X 升级到 2.6.X 后无法运行我的 jar
CentOS6.4内核升级, 2.6.*版本升级 Kernel 3.10.*
升级到 Spring Boot 版本 2 后 Prometheus 无法正常工作