记一次spring-data-mongodb的升级

项目中使用了spring-data-mongodb,最近在浏览官网时发现新增了2个很有用的feature:

1,@DocumentReference,解决mongodb建模中的一对多、多对一关系的利器。

2,@Update注解,支持在repository接口上直接findAndUpdate的操作。

Mongodb的关系型建模一直很弱,官方开始推崇的嵌入式其实问题很多,所以更多的时候我们还是采用手动设置refId或者使用$ref数据结构,但是前者要手动lookup,后者有N+1问题,所以都不理想。

DocumentReference初步测试了一下,支持懒加载,不适用懒加载时会自动用$or操作进行关联,避免了N+1问题。但是这货不走MongoTemplate,所以无法使用前者查看查询语句,只能通过mongo driver打印查看。

好了。接下来就是战战兢兢的升级时间:由于新版的spring-data-mongodb 3.4.2有一大堆spring相关的组件依赖,因此需要把整个spring-framework/spring-boot/spring-cloud全部升级一遍,最终我升级到了以下版本:

spring-core: 5.3.22

spring-boot: 2.6.11

(友提:现在mvnrepository会列出开源依赖包的漏洞,有漏洞的尽量避免使用,没有的也只代表现在没有:)

还挺顺利的,启动,报错了,swagger抛出了莫名其妙的NPE,我就知道必然有坑……

了解到springfox.2.9.2与新版本spring boot存在不兼容的问题,升级到2.x的最高版2.10.5,倒是不报错了,陷入了死循环,就看到console一直打印no mapping found for null/swagger-ui/xxx。找到github上一个bug(#2907),很有意思,提出者说的就是这个问题,然后贡献者说3.0改了,让升级,把bug关了,下面一堆人说2.x和3.0依然有这个问题,不准关,就没有然后了。看了下提交记录,我预感这个项目垮丝了。

最终,迁移到了springdoc,基本正常了,这个项目还贴心的给出了从springfox迁移的指南。对于openapi的历史实在不太了解,只是想用好接口文档生成工具,接下来应该会稳定使用一段时间了。最后是springdoc的依赖:

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.6.11</version>
</dependency>sspring 

 

posted @ 2022-09-08 15:37  思翰爹  阅读(1005)  评论(0编辑  收藏  举报