3.2.2
2025年6月3日大约 4 分钟
3.2.2
基于 SpringBoot 3.2.5 开发的 Java 后端后台管理业务基础框架,常用的业务功能已经集成,开箱即用,相关使用说明,可以参考:
主要更新
- 工具包
- 核心模块
- SM2 16进制加密字符串公/私钥加载为密钥key方法
- Excel 导出工具
- 配置字典翻译器
- 导出配置可以直接设置
- 纵向合并相同单元格
- MybatisPlus
- 不能动态的判断数据库类型,如果存在多个数据源的情况就不能准确的去判断当前连接的数据源类型,现在可以通过
${_database_id_}
来得到连接的数据库类型,用以替代${_databaseId}
(单数据源的情况下还是可以正常使用 ${_databaseId})
- 不能动态的判断数据库类型,如果存在多个数据源的情况就不能准确的去判断当前连接的数据源类型,现在可以通过
- DBFieldUtil
- 忽略掉打了忽略标签的字段导出
- 默认合并相同项
- TreeUtil 树结构工具优化
- 不改变原数据类型
- 可自定义排序规则
- 不排序或者按数据排序可以实现100万数据在 500 毫秒内完成生成树和排序
- 不限定 root 节点
- 可以指定排除某些节点
- 数据同步工具
- 新增库对库数据同步工具:
io.github.mangocrisp.spring.taybct.tool.core.ds.sync
,目前实现了PGSQL
ORACLE
MySQL
三库之前的库对库流式同步,并且提供了IDataSyncHandler
接口用于扩展,你还可以同步其他类型的数据库,只需要实现IDataSyncHandler
接口即可
示例代码
import io.github.mangocrisp.spring.taybct.tool.core.ds.sync.DataSyncConfig; import io.github.mangocrisp.spring.taybct.tool.core.ds.sync.DataSyncService; import io.github.mangocrisp.spring.taybct.tool.core.ds.sync.DriverType; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.springframework.boot.test.context.SpringBootTest; /** * <pre> * 同步数据测试(流式) * </pre> * * @author XiJieYin * @since 2025/4/15 11:35 */ @SpringBootTest @Slf4j public class SyncDataTest { @Test public void test1() { DataSyncService dataSyncService = new DataSyncService(); dataSyncService.sync(DataSyncConfig.builder() // 读取 // postgresSQL // .sourceDriver(DriverType.postgresSQL) // .sourceUrl("jdbc:postgresql://192.168.1.28:5432/tianhe-police-intelligence?currentSchema=public") // .sourceSchema("public") // .sourceUser("postgres") // .sourcePass("password") // .sourceTable("PLSG_TRAVEL_APPLY") // .sqlSelect("SELECT * FROM PLSG_TRAVEL_APPLY WHERE CREATE_TIME > ?::TIMESTAMP") // MySQL // .sourceDriver(DriverType.mysqlCJ) // .sourceUrl("jdbc:mysql://localhost:3306/plsg?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8") // .sourceSchema("plsg") // .sourceUser("root") // .sourcePass("password") // .sourceTable("PLSG_TRAVEL_APPLY") // .sqlSelect("SELECT * FROM PLSG_TRAVEL_APPLY WHERE CREATE_TIME > ?") // oracle .sourceDriver(DriverType.oracle7AndThen) .sourceUrl("jdbc:oracle:thin:@192.168.1.28:1521/ORCL") .sourceSchema("PLSG") .sourceUser("PLSG") .sourcePass("PLSG") .sourceTable("PLSG_TRAVEL_APPLY") .sqlSelect("SELECT * FROM PLSG_TRAVEL_APPLY WHERE CREATE_TIME > TO_DATE(?,'yyyy-MM-dd HH24:mi:ss')") // 写入 // postgresSQL .targetDriver(DriverType.postgresSQL) .targetUrl("jdbc:postgresql://192.168.1.28:5432/tianhe-police-intelligence?currentSchema=public") .targetSchema("public") .targetUser("postgres") .targetPass("password") .targetTable("plsg_travel_apply") .fieldUniqueKye("id") .fieldLastSyncTime("CREATE_TIME") .sqlLastSyncTime("SELECT MAX(CREATE_TIME) CREATE_TIME FROM plsg_travel_apply") // mysql // .targetDriver(DriverType.mysqlCJ) // .targetUrl("jdbc:mysql://localhost:3306/plsg?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8") // .targetSchema("plsg") // .targetUser("root") // .targetPass("password") // .targetTable("plsg_travel_apply") // .fieldLastSyncTime("CREATE_TIME") // .sqlLastSyncTime("SELECT MAX(CREATE_TIME) CREATE_TIME FROM plsg_travel_apply") // oracle // .targetDriver(DriverType.oracle7AndThen) // .targetUrl("jdbc:oracle:thin:@192.168.1.28:1521/ORCL") // .targetSchema("PERSONNEL") // .targetUser("PERSONNEL") // .targetPass("PERSONNEL") // .targetTable("PLSG_TRAVEL_APPLY") // .fieldLastSyncTime("CREATE_TIME") // .sqlLastSyncTime("SELECT MAX(CREATE_TIME) CREATE_TIME FROM PLSG_TRAVEL_APPLY") .build()); } }
- 新增库对库数据同步工具:
- PGobject 优化
PGSQL
利用MyBatis
查询回来的 JSON 数据类型会封装成PGobject
对象,所以这个对象如果直接返回到前端,前端需要再获取一层里面的json
属性,并且还需要再转换一遍JSON.parse(json)
,这里添加了ToJSONObjectSerializer
和ToJSONArraySerializer
,搭配@JsonSerialize()
注解可以来实现将PGobject
对象转成JSON
对象或者JSON
数组。- 现在可以直接存
JSON
对象或者JSON
数组到数据库,但是Bean
的属性的类型还是得用Object
,MyBatisUtil
会做处理转成PGobject
存储到数据库
- 任务调度
- 基于 Redis 加锁实现分布式定时任务优化获取本机 ip 地址的方法
- 新增尝试执行一次任务,可以直接绕过时间限制来直接运行一次任务
- 文件模块
- FileServiceBuilder
- 现在可以通过网址来转存文件,输入文件的地址,即可转存文件
- FileServiceBuilder
- 核心模块
- 框架
- 代码优化
- 菜单获取树结构优化
- 依赖优化
- gateway 是基于 webflux 的,不需要用到 undertow,这里排除不需要的依赖项
- 便捷性
- 代码优化
贡献者
Mango Crisp