springboot2.7.18 升级到3.1.5过程
Spring Boot3 从 2.7.10升级到3.1.5有以下几个点需要注意。JDK版本支持从JDK 17-19版本javax.servlet切换到jakarta.servletspring.redis配置切换为spring.data.redisSpring Cloud 2022.0.4Spring Cloud Alibaba 2022.0.0.0Spring Boot3 升级参考文档spring boot升级参考spring cloud升级参考spring cloud alibaba升级参考SpringBoot3版本代码示例GitHub - jeecgboot/JeecgBoot at springboot3查看springboot父级项目和依赖项目是否有依赖 springboot2.7.18若有责需要需要升级到3.1.5相关依赖版本!-- 微服务 -- spring-cloud.version2022.0.4/spring-cloud.version spring-cloud-alibaba.version2022.0.0.0/spring-cloud-alibaba.version alibaba.nacos.version2.0.4/alibaba.nacos.version xxl-job-core.version2.4.1/xxl-job-core.version fastjson.version2.0.43/fastjson.version aviator.version5.2.6/aviator.version pegdown.version1.6.0/pegdown.version commonmark.version0.17.0/commonmark.version knife4j-spring-boot-starter.version4.4.0/knife4j-spring-boot-starter.version !-- 数据库驱动 -- postgresql.version42.2.25/postgresql.version ojdbc6.version11.2.0.3/ojdbc6.version sqljdbc4.version4.0/sqljdbc4.version mysql-connector-java.version8.0.27/mysql-connector-java.version hutool.version5.8.25/hutool.version !-- 国产数据库驱动 -- kingbase8.version9.0.0/kingbase8.version dm8.version8.1.1.49/dm8.version !-- 积木报表-- jimureport-spring-boot-starter.version1.9.4/jimureport-spring-boot-starter.version !-- 持久层 -- mybatis-plus.version3.5.3.2/mybatis-plus.version dynamic-datasource-spring-boot-starter.version4.1.3/dynamic-datasource-spring-boot-starter.version druid.version1.2.24/druid.version commons-io.version2.11.0/commons-io.version commons.version2.6/commons.version aliyun-java-sdk-dysmsapi.version2.1.0/aliyun-java-sdk-dysmsapi.version aliyun.oss.version3.17.3/aliyun.oss.version !-- shiro -- shiro.version1.12.0/shiro.version java-jwt.version3.11.0/java-jwt.version shiro-redis.version3.2.2/shiro-redis.version codegenerate.version1.4.9/codegenerate.version autopoi-web.version1.4.11/autopoi-web.version minio.version8.5.7/minio.version justauth-spring-boot-starter.version1.4.0/justauth-spring-boot-starter.version dom4j.version1.6.1/dom4j.version qiniu-java-sdk.version7.4.0/qiniu-java-sdk.version jedis.version3.8.0/jedis.version baidu-java-sdk.version4.16.19/baidu-java-sdk.version !-- Log4j2爆雷漏洞 -- !-- spring boot 3 不支持下列两个版本-- !--log4j2.version2.17.0/log4j2.version-- logback.version1.4.12/logback.version升级activiti到8.0.0添加activiti 指定仓库由于7.1.0.M6以后 官方不再将构建制品发布到maven中央仓库了而是发布在了alfresco仓库这就需要我们仓库才能正确下载依赖.在pom中添加repositories标签然后再添加repository标签。如果repositories已经有了切不要再添加而是将repository标签和里面的内容复制进去。最终效果如下repositories repository idactiviti-releases/id urlhttps://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/url /repository我activiti项目中的全部依赖含activitiproperties activiti.version8.0.0/activiti.version pagehelper.boot.version1.4.6/pagehelper.boot.version /properties dependencies !-- pagehelper 分页插件 -- dependency groupIdcom.github.pagehelper/groupId artifactIdpagehelper-spring-boot-starter/artifactId version${pagehelper.boot.version}/version /dependency !--activiti-- dependency groupIdorg.activiti/groupId artifactIdactiviti-dependencies/artifactId version${activiti.version}/version scopeimport/scope typepom/type /dependency dependency groupIdorg.activiti/groupId artifactIdactiviti-spring-boot-starter/artifactId version${activiti.version}/version exclusions exclusion groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-jpa/artifactId /exclusion exclusion artifactIdmybatis/artifactId groupIdorg.mybatis/groupId /exclusion exclusion artifactIdcommons-io/artifactId groupIdcommons-io/groupId /exclusion exclusion artifactIdspring-jdbc/artifactId groupIdorg.springframework/groupId /exclusion exclusion artifactIdjakarta.persistence-api/artifactId groupIdjakarta.persistence/groupId /exclusion /exclusions /dependency dependency groupIdorg.springframework/groupId artifactIdspring-jdbc/artifactId version5.3.30/version !-- 根据你的Spring版本调整 -- /dependency dependency groupIdorg.jeecgframework.boot/groupId artifactIdjeecg-system-biz/artifactId version3.7.3/version /dependency !--引入微服务启动依赖 starter-- dependency groupIdorg.jeecgframework.boot/groupId artifactIdjeecg-boot-starter3-cloud/artifactId version3.7.3/version /dependency dependency groupIdorg.hibernate/groupId artifactIdhibernate-core/artifactId exclusions exclusion groupIdcommons-collections/groupId artifactIdcommons-collections/artifactId /exclusion /exclusions /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version exclusions exclusion artifactIdjsqlparser/artifactId groupIdcom.github.jsqlparser/groupId /exclusion exclusion artifactIdmybatis/artifactId groupIdorg.mybatis/groupId /exclusion exclusion artifactIdspring-jdbc/artifactId groupIdorg.springframework/groupId /exclusion /exclusions /dependency !-- 引入定时任务依赖 -- dependency groupIdorg.jeecgframework.boot/groupId artifactIdjeecg-boot-starter-job/artifactId version3.8.0/version /dependency dependency groupIdcom.dameng/groupId artifactIdDm8JdbcDriver18/artifactId version8.1.1.49/version /dependency dependency groupIdcom.dameng/groupId artifactIdDmDialect-for-hibernate5.0/artifactId version8.1.1.49/version /dependency dependency groupIdorg.jetbrains/groupId artifactIdannotations/artifactId version26.0.2/version scopecompile/scope /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-security/artifactId /dependency dependency groupIdorg.hibernate.orm/groupId artifactIdhibernate-core/artifactId version6.6.13.Final/version exclusions exclusion artifactIdhibernate-commons-annotations/artifactId groupIdorg.hibernate.common/groupId /exclusion exclusion artifactIdjakarta.persistence-api/artifactId groupIdjakarta.persistence/groupId /exclusion /exclusions !-- Spring Boot 3.1.x兼容版本 -- /dependency dependency groupIdorg.hibernate/groupId artifactIdhibernate-jpamodelgen/artifactId version6.6.13.Final/version typepom/type scopeprovided/scope /dependency /dependencies因activiti默认集成Security SecurityConfig 需要全部放行但升级完写法也变了注释的事boot2,下面没注释掉的是boot3的package org.jeecg.modules.activiti.config.security; //import org.springframework.context.annotation.Bean; //import org.springframework.context.annotation.Configuration; //import org.springframework.security.config.annotation.web.builders.HttpSecurity; //import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; //import org.springframework.security.core.userdetails.User; //import org.springframework.security.core.userdetails.UserDetailsService; //import org.springframework.security.provisioning.InMemoryUserDetailsManager; //import org.springframework.security.web.SecurityFilterChain; // //Configuration //EnableWebSecurity //public class SecurityConfig extends WebSecurityConfigurerAdapter { // Override // public void configure(HttpSecurity http) throws Exception { // // http.authorizeRequests() // .anyRequest().permitAll().and().logout().permitAll()//配置不需要登录验证 // .and().headers().frameOptions().sameOrigin() // 解决 frame because it set X-Frame-Options to deny // .and().csrf().disable() //关闭跨站请求伪造 // ; // } //} import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.web.SecurityFilterChain; Configuration EnableWebSecurity public class SecurityConfig { Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http // 授权配置 .authorizeHttpRequests(auth - auth .anyRequest().permitAll() // 允许所有请求 ) // 登出配置 .logout(logout - logout .permitAll() // 允许所有人访问登出端点 ) // 头部配置 .headers(headers - headers .frameOptions(frame - frame .sameOrigin() // 允许同源iframe嵌套 ) ) // CSRF配置 .csrf(csrf - csrf .disable() // 禁用CSRF保护 ); return http.build(); } }#Shiro升级说明​由于Spring Boot内部的servlet包换掉了所以shiro需要升级不过还好shiro官方提供了支持以下是shiro的升级替换。需要注意的是spring boot 3.1.5对jedis的版本做了提升提升后shiro无法兼容所以只能在项目进行降版本处理。shiro升级参考文档 Java17和springboot3.0使用shiro报ClassNotFoundException_shiro java17-CSDN博客!--shiro-- dependency groupIdorg.apache.shiro/groupId artifactIdshiro-spring-boot-starter/artifactId version${shiro.version}/version exclusions exclusion groupIdorg.apache.shiro/groupId artifactIdshiro-spring/artifactId /exclusion /exclusions /dependency !-- shiro-redis -- dependency groupIdorg.crazycake/groupId artifactIdshiro-redis/artifactId version${shiro-redis.version}/version exclusions exclusion groupIdorg.apache.shiro/groupId artifactIdshiro-core/artifactId /exclusion exclusion artifactIdcheckstyle/artifactId groupIdcom.puppycrawl.tools/groupId /exclusion /exclusions /dependency !-- shiro 无法使用 spring boot 3.X 自带的jedis降版本处理 -- dependency groupIdredis.clients/groupId artifactIdjedis/artifactId version2.9.0/version /dependency dependency groupIdorg.apache.shiro/groupId artifactIdshiro-spring/artifactId classifierjakarta/classifier version${shiro.version}/version !-- 排除仍使用了javax.servlet的依赖 -- exclusions exclusion groupIdorg.apache.shiro/groupId artifactIdshiro-core/artifactId /exclusion exclusion groupIdorg.apache.shiro/groupId artifactIdshiro-web/artifactId /exclusion /exclusions /dependency !-- 引入适配jakarta的依赖包 -- dependency groupIdorg.apache.shiro/groupId artifactIdshiro-core/artifactId classifierjakarta/classifier version${shiro.version}/version /dependency dependency groupIdorg.apache.shiro/groupId artifactIdshiro-web/artifactId classifierjakarta/classifier version${shiro.version}/version exclusions exclusion groupIdorg.apache.shiro/groupId artifactIdshiro-core/artifactId /exclusion /exclusions /dependency#knife4j升级说明​knife4j对于spring boot 3.X版本提供了支持不过相当于spring boot 2.X的版本来说差异比较大从springfox转换成了springdoc不能做到平滑升级以下是需要替换的注解列表.knife4j升级参考文档​Knife4j版本参考 | Knife4jOpenAPI 3 Library for spring-bootknife4j 2版本与3版注解变化如下​便于大家快速升级官方写了一个Python脚本可以快速将整个项目升级为springdoc注解。Api→TagApiIgnore→Parameter(hidden true)orOperation(hidden true)orHiddenApiImplicitParam→ParameterApiImplicitParams→ParametersApiModel→SchemaApiModelProperty(hidden true)→Schema(accessMode READ_ONLY)ApiModelProperty→SchemaApiOperation(value foo, notes bar)→Operation(summary foo, description bar)ApiParam→ParameterApiResponse(code 404, message foo)→ApiResponse(responseCode 404, description foo)同样在初始化文档对象上也有区别以下前后替换[Bean](https://my.oschina.net/bean) public GroupedOpenApi swaggerOpenApi() { return GroupedOpenApi.builder() .group(default) .packagesToScan(org.jeecg) .build(); } [Bean](https://my.oschina.net/bean) public OpenAPI customOpenAPI() { return new OpenAPI() .info(new Info() .title(JeecgBoot 后台服务API接口文档) .version(1.0) .contact(new Contact().name(北京国炬信息技术有限公司).url(www.jeccg.com).email(jeecgos163.com)) .description( 后台API接口) .termsOfService(NO terms of service) .license(new License().name(Apache 2.0).url(http://www.apache.org/licenses/LICENSE-2.0.html)) ); } // ---------------------------替换后--------------------- [Bean](https://my.oschina.net/bean) public GroupedOpenApi swaggerOpenApi() { return GroupedOpenApi.builder() .group(default) .packagesToScan(org.jeecg) .build(); } [Bean](https://my.oschina.net/bean) public OpenAPI customOpenAPI() { return new OpenAPI() .info(new Info() .title(JeecgBoot 后台服务API接口文档) .version(1.0) .contact(new Contact().name(北京国炬信息技术有限公司).url(www.jeccg.com).email(jeecgos163.com)) .description( 后台API接口) .termsOfService(NO terms of service) .license(new License().name(Apache 2.0).url(http://www.apache.org/licenses/LICENSE-2.0.html)) ); }升级的maven地址dependency groupIdcom.github.xiaoymin/groupId artifactIdknife4j-openapi3-jakarta-spring-boot-starter/artifactId version4.3.0/version /dependency在knife4j 4.X版本中首次在对swagger文档与spring cloud gateway进行了整合提供完整的解决方案做到了开箱即用以下是应用案例dependency groupIdcom.github.xiaoymin/groupId artifactIdknife4j-gateway-spring-boot-starter/artifactId version4.3.0/version /dependency#spring boot 3.x 生态平滑升级​以下为平滑升级即更换版本即可不需要做任何调整!-- druid -- dependency groupIdcom.alibaba/groupId artifactIddruid-spring-boot-3-starter/artifactId version1.2.20/version /dependency !-- 动态数据源 -- dependency groupIdcom.baomidou/groupId artifactIddynamic-datasource-spring-boot3-starter/artifactId version4.1.3/version /dependency !-- spring boot-admin -- dependency groupIdde.codecentric/groupId artifactIdspring-boot-admin-starter-server/artifactId version3.0.4/version /dependency#META-INF升级spring.factories​新建文件org.springframework.boot.autoconfigure.AutoConfiguration.imports把需要自动加载的启动类一行一个全限定名就可以了 替换原来的spring.factories升级小技巧​模块快速升级springboot3改造过程第一步切换项目JDK和Maven的JDK为17 第二步替换过时类 搜索javax.servlet.http.HttpServletRequest 替换为jakarta.servlet.http.HttpServletRequest 搜索javax.servlet.http.HttpServletResponse 替换为jakarta.servlet.http.HttpServletRequest 搜索javax.websocket 替换为jakarta.websocket 搜索Api替换为//Api 搜索AutoLowApp替换为//AutoLowApp 搜索io.swagger.annotations.ApiModel删掉 搜索io.swagger.annotations.Api删掉 搜索javax.annotation.Resource删掉开源删除类搜索org.jeecg.common.constant.enums.LowAppAopEnum删掉 搜索org.jeecg.common.aspect.annotation.AutoLowApp删掉 搜索org.jeecg.common.bpm.api.IBpmBaseExtApi删掉mvnhelp解决冲突依赖冲突这个事情就不详细讲了每个项目的情况都不一样你可以用mvnhelp解决冲突若有依赖冲突报错再想着去Exclude掉不用把显示的所有有冲突依赖全部去掉那样项目可能反而起不来Maven Helper mvn项目冲突如何解决_maven helper运行时冲突-CSDN博客

相关新闻

Drawio UI界面个性化配置

Drawio UI界面个性化配置

Drawio是免费、强大的图形绘制工具,为最大化扩大绘图区,个性化配置默认样式以提高绘图效率,研究了UI界面、默认样式的配置方法。配置文件使用方法单击菜单的【其它】|【配置】,将配置文件(json格式)内容复制…

2026/7/29 18:15:47阅读更多 →
面向高速Serdes的信号完整性优化:从封装 - 板级互连局限到封装内互连技术演进(一)

面向高速Serdes的信号完整性优化:从封装 - 板级互连局限到封装内互连技术演进(一)

摘要 本文围绕影响下一代传输通道性能的各类关键电磁效应展开研究: 首先剖析封装 - 主板一体化互连结构带来的影响,在高速率场景下,结构细微偏差极易引发谐振效应与串扰问题; 第二部分引入本征模分析法,表征封装与主板组合结构内部的腔体谐振特性,并给出抑制谐振造成的…

2026/7/29 18:13:47阅读更多 →
OpCore Simplify:三大技术突破重塑黑苹果配置体验

OpCore Simplify:三大技术突破重塑黑苹果配置体验

OpCore Simplify:三大技术突破重塑黑苹果配置体验 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在非苹果硬件上运行macOS曾是一项需要深…

2026/7/29 18:13:47阅读更多 →
物联网智能锁技术落地:解决网约房/民宿身份核验与远程授权难题

物联网智能锁技术落地:解决网约房/民宿身份核验与远程授权难题

随着共享住宿行业规范化监管升级,网约房、民宿普遍面临入住身份核验不闭环、权限管理滞后、人工运维成本高、安全隐患频发四大核心问题。传统密码锁、机械门锁无法对接官方监管体系,存在人证不符、无证入住、权限滞留等漏洞,不仅违反公安住宿…

2026/7/29 19:31:24阅读更多 →
AG Kit错误恢复案例:AI Agent系统故障处理实例

AG Kit错误恢复案例:AI Agent系统故障处理实例

AG Kit错误恢复案例:AI Agent系统故障处理实例 【免费下载链接】ag-kit 项目地址: https://gitcode.com/GitHub_Trending/an/ag-kit AG Kit作为一款模块化AI Agent工具包,在复杂的自动化任务中难免会遇到各类系统故障。本文将通过实际案例&#…

2026/7/29 19:31:24阅读更多 →
如何用OCR4all处理早期印刷书籍?LAREX布局分析工具实战指南

如何用OCR4all处理早期印刷书籍?LAREX布局分析工具实战指南

如何用OCR4all处理早期印刷书籍?LAREX布局分析工具实战指南 【免费下载链接】OCR4all Provides OCR (Optical Character Recognition) services through web applications 项目地址: https://gitcode.com/gh_mirrors/oc/OCR4all OCR4all是一款开源的光学字符…

2026/7/29 19:31:24阅读更多 →
MarkdownTextView扩展开发实战:轻松实现自定义语法高亮

MarkdownTextView扩展开发实战:轻松实现自定义语法高亮

MarkdownTextView扩展开发实战:轻松实现自定义语法高亮 【免费下载链接】MarkdownTextView Rich Markdown editing control for iOS 项目地址: https://gitcode.com/gh_mirrors/ma/MarkdownTextView MarkdownTextView是一款强大的iOS富文本编辑控件&#xff…

2026/7/29 19:31:24阅读更多 →
篮球口袋教练 HarmonyOS 学习应用(07):个人页成就与学习统计

篮球口袋教练 HarmonyOS 学习应用(07):个人页成就与学习统计

一、统计卡片不能从页面临时变量取数 个人页同时展示连续学习、累计时长、课程完成、练习和测验等信息。若每张卡片各自维护一个计数器,返回页面、重启应用或在其他页面新增记录后,数字很容易彼此矛盾。这里把个人页视为统计结果的消费者,而…

2026/7/29 19:31:24阅读更多 →
突破性Windows网络性能测试方案:iperf3完整指南与下载安装

突破性Windows网络性能测试方案:iperf3完整指南与下载安装

突破性Windows网络性能测试方案:iperf3完整指南与下载安装 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds 还在为网络速度不稳定而烦恼吗…

2026/7/29 19:29:24阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →