基于 SpringBoot 3.5.6 开发的 Java 后端后台管理业务基础框架,常用的业务功能已经集成,开箱即用,相关使用说明,可以参考:
主要更新
3.5.1 将兼容使用 Gradle 管理项目,随着项目的体积越来越大,模块越来越多,在传统的 Maven 项目中,无论是编译或是打包运行,都让项目变得越来越缓慢,所以引入了 Gradle 的项目配置,新项目直接选择使用 Gradle 管理就行了,如果是老项目升级,可以参考:Maven 项目迁移到 Gradle
基于 SpringBoot 3.5.6 开发的 Java 后端后台管理业务基础框架,常用的业务功能已经集成,开箱即用,相关使用说明,可以参考:
3.5.1 将兼容使用 Gradle 管理项目,随着项目的体积越来越大,模块越来越多,在传统的 Maven 项目中,无论是编译或是打包运行,都让项目变得越来越缓慢,所以引入了 Gradle 的项目配置,新项目直接选择使用 Gradle 管理就行了,如果是老项目升级,可以参考:Maven 项目迁移到 Gradle
基于 SpringBoot 3.2.5 开发的 Java 后端后台管理业务基础框架,常用的业务功能已经集成,开箱即用,相关使用说明,可以参考:
if (field.isAnnotationPresent(TableFieldJSON.class) && ObjectUtil.isNotEmpty(fieldValue))
/**
* 检测文件是否为空
*
* @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;
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 java
total used free shared buff/cache available
Mem: 1.6Gi 817Mi 143Mi 2.6Mi 819Mi 795Mi
Swap: 0B 0B 0B
基于 SpringBoot 3.2.5 开发的 Java 后端后台管理业务基础框架,常用的业务功能已经集成,开箱即用,相关使用说明,可以参考:
工具包
框架
taybct:
secure:
auth:
login-page:
# 开启重定向到登录页面
redirect: true
# 登录页面
redirect-login-page: https://127.0.0.1/#/login
# 登录页面登录成功之后用于获取 code 的接口地址
params-redirect-api: https://127.0.0.1/api/auth/oauth/authorize
# 前端获取参数需要加密的 url 加密类型
params-redirect-api-encode-type: uri_component
POM依赖,Spring Gateway是基于WebFlux的,不需要用到UndertowBUGmeta信息MyBatisX模板
Pure Admin的前端模板便捷性
基于 SpringBoot 3.2.5 开发的 Java 后端后台管理业务基础框架,常用的业务功能已经集成,开箱即用,相关使用说明,可以参考:
${_database_id_}来得到连接的数据库类型,用以替代 ${_databaseId}(单数据源的情况下还是可以正常使用 ${_databaseId})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());
}
}
PGSQL 利用 MyBatis 查询回来的 JSON 数据类型会封装成 PGobject 对象,所以这个对象如果直接返回到前端,前端需要再获取一层里面的 json 属性,并且还需要再转换一遍 JSON.parse(json),这里添加了 ToJSONObjectSerializer和ToJSONArraySerializer,搭配 @JsonSerialize() 注解可以来实现将 PGobject 对象转成 JSON 对象或者 JSON 数组。JSON 对象或者 JSON 数组到数据库,但是 Bean 的属性的类型还是得用 Object,MyBatisUtil 会做处理转成 PGobject 存储到数据库基于 SpringBoot 3.5.6 开发的 Java 后端后台管理业务基础框架,常用的业务功能已经集成,开箱即用,相关使用说明,可以参考:
3.5.2 主要更新了工具升级和一些业务功能,以及修复一些配置错误
基于 SpringBoot 3.5.6 开发的 Java 后端后台管理业务基础框架,常用的业务功能已经集成,开箱即用,相关使用说明,可以参考:
3.5.3 定时任务,控制台日志管理功能 、 SQL注入的安全问题相关优化 、解决WebSocket 多模块并发问题
基于 SpringBoot 3.2.5 开发的 Java 后端后台管理业务基础框架,常用的业务功能已经集成,开箱即用,相关使用说明,可以参考:
@SyncToAnywhere