3.2.4
2025年9月28日大约 5 分钟
3.2.4
基于 SpringBoot 3.2.5 开发的 Java 后端后台管理业务基础框架,常用的业务功能已经集成,开箱即用,相关使用说明,可以参考:
主要更新
工具包
- 核心模块
- 【优化】WebSocket 优化
WebSocket 示例 WebSocket 示例
1. 新增 topic 类型 system,用于系统发送消息,例如连接是否成功这种提示
2. 消息载体改为 WSR(类似 R 对象),这种类似 http 接口的消息返回方式,让返回结构统一
3. 新增了消息发送状态的判断方法以及默认的实现
4. 优化了二进制传输
5. 消息用户的反馈更精准(使用 session 绑定每次的消息) - 【优化】History 相关的都修改为 DBOperateHistory,因为有些 Bean 冲突问题
- 【优化】修改部分 final class 为 record
- 【修复】MyBatisUtil 获取 JSON 的时候需要做非空判断
if (field.isAnnotationPresent(TableFieldJSON.class) && ObjectUtil.isNotEmpty(fieldValue)) - 【修复】文件上传空文件拦截异常,如果上传了一个空的文件,比如一个空的 word 文件,就会报异常
/** * 检测文件是否为空 * * @param wordFile 文件 */ private static void checkWordFileEmpty(MultipartFile wordFile){ if (isWordFileEmpty(wordFile)){ throw new FileUploadException("上传文件不能为空"); } } - 【修复】修复不合适的依赖
import org.ehcache.impl.internal.concurrent.ConcurrentHashMap; 修改为 import java.util.concurrent.ConcurrentHashMap; - 【升级】为了让项目可以最小化运行,兼容了 Sqlite
top 情况:free 情况:top - 17:25:51 up 13 days, 6 min, 3 users, load average: 0.00, 0.00, 0.00 Tasks: 110 total, 2 running, 108 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.7 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 1613.1 total, 143.8 free, 817.9 used, 819.9 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 795.2 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 87183 root 20 0 3039528 505164 29056 S 1.0 30.6 1:59.76 javatotal used free shared buff/cache available Mem: 1.6Gi 817Mi 143Mi 2.6Mi 819Mi 795Mi Swap: 0B 0B 0B
- 【优化】WebSocket 优化
框架
- 【优化】从 3.2.4 开始,
spring-taybct-cloud和spring-taybct-single将所有的原来spring-taybct的基础代码都合并进来了,不再需要去覆盖代码来实现业务需求了,代码想怎么改怎么改 - 【优化】消息通知接入 WebSocket
1. 实时性更好
2. 有实时消息只做插入数据库备份保存,同时利用 WebSocket 发给客户端,非定时轮询数据库减少性能损耗
3. 提供了简单的统一发送 WebSocket 消息到客户端的 Feign/Dubbo 接口实现(后续可以自行写)代码 代码
4. 做了 WebSocket 的简单鉴权,利用 jti 存在于 online 表来判断用户是否已经通过了鉴权代码 代码
5. 优化了消息通知字段 - 【优化】流程引擎
对之前一直没用起来的基于滴滴开源 LogicFlow适配的流程引擎做了大量的优化,现在已经可以满足基本的流程使用,LogicFlow拥有许多自定义的配置,可以满足大部分的流程使用场景,但是这些还是需要在项目开发过程中做一些相应的适配,比如,一些特定的需求
需要写自定义的一些逻辑,就需要注入一些Bean去做处理 演示 - 【优化】黑/白名单的
uri做了对RESTful的支持 - 【修复】JTI 失效时长
登录成功之后会在前端自动设置一个 JTI 来标识已经登录成功,这样可以方便第三方授权码登录,但是这个 JTI 之前的时效性是没有设置的,应该设置得和access_token_exp一样长 - 【升级】兼容 Sqlite
所有的相关的 Mapper.xml 都已经做了代码兼容,如果需要使用 Sqlite,需要做以下配置:- pom.xml 添加 Sqlite 的依赖
<dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> </dependency>- 在数据库配置文件里面配置 Sqlite 连接
spring: datasource: dynamic: primary: sqlite3 datasource: sqlite3: url: jdbc:sqlite:d:/dev/db/sqlite3/data/taybct.db driver-class-name: org.sqlite.JDBC # SQLite 不需要用户名和密码,这里留空即可 username: password:- 因为使用的是
Spring Authorization Server,他的源代码里面就没有做Sqlite的兼容,所以需要自己做兼容,这里提供了兼容的代码(只做参考,你可以自己配置):
@Bean public OAuth2AuthorizationService authorizationService(JdbcTemplate jdbcTemplate , RegisteredClientRepository registeredClientRepository) { JdbcOAuth2AuthorizationService service = new JdbcOAuth2AuthorizationService(jdbcTemplate, registeredClientRepository); OAuth2SqliteAuthorizationRowMapper authorizationRowMapper = new OAuth2SqliteAuthorizationRowMapper(jdbcTemplate, registeredClientRepository); authorizationRowMapper.setLobHandler(new DefaultLobHandler()); authorizationRowMapper.setObjectMapper(objectMapper()); service.setAuthorizationRowMapper(authorizationRowMapper); return service; } public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); ClassLoader classLoader = JdbcOAuth2AuthorizationService.class.getClassLoader(); List<Module> securityModules = SecurityJackson2Modules.getModules(classLoader); objectMapper.registerModules(securityModules); objectMapper.registerModule(new OAuth2AuthorizationServerJackson2Module()); //放入自定义的user类 objectMapper.addMixIn(OAuth2UserDetails.class, OAuth2UserMixin.class); objectMapper.addMixIn(CustomizeTokenAuthenticationToken.class, OAuth2UserMixin.class); return objectMapper; }顺便说一下
建议使用
_db_type_db_来判断数据库类型而不是_databaseId,因为_databaseId他在多数据源的情况下会有些莫名其妙的问题。 - 【升级】加入了基于OnlyOffice的在线文档功能
- 配置,OnlyOffice 的安装教程可以参考OnlyOffice+VUE3+Java+OSS 实现在线协同编辑文档
- 演示:在线文档
这里因为服务器资源不太够安装OnlyOffice,只能贴出图片演示效果


便捷性
- 【优化】业务代码模板
贡献者
Mango Crisp