FlinkDataSync 是本系统的关键数据同步服务,必须首先启动!
获取Sys_DictionaryItem的方式不能只传递Value值,因为这是个字典集合,很多个字典都会有同样的Value,应当增加DictionaryCode的校验,数据库结构的markdown文件中的说明列里,会告诉你每个字段对应的是哪个DictionaryCode 先找到项目里的.pdm文件或用户上传的上下文,如果能从中导出表和字段的信息,则以此为准,不能随意修改数据库的结构和数据 上下文中的数据库设计文档集才是最终的数据库结构标准 必须完全信任数据库文档,数据库的结构和文档必然是一致的 单一SQL语句返回完整的列表信息是最优的选择 SQLServer数据库的版本是2008 R2,选择使用它的存储过程和函数时,要注意版本兼容性问题,避免使用2012及以上版本的功能 只有tugboatcommon和liandatugboatmis这两个库同时存在的表才需要读写分离,即写入到tugboatcommon库里,从liandatugboatmis库读取数据,其他表都在各自的数据库里读写即可 为了方便理解,说明一下:tugboatcommon库是系统公共库,liandatugboatmis是分支机构的业务库,公共库存放所有机构共享的数据,而分支机构的业务库则存放各自机构的业务数据,他们并不是单纯的读库和写库的区别 修改哪个项目就重新调试哪个项目,不要每次都全部重新启动调试 技能文档永远是对的 不要改变项目的端口号,这是个多个项目协作的项目,修改端口号会带来一系列问题 严禁修改任何让用户参考的文件或配置,包括但不限于:FlinkDataSync的同步配置、数据库结构、端口配置等
本项目是一个多项目协作系统,共包含四个项目,各项目端口配置如下,严禁随意修改:
| 项目名称 | 端口 | 说明 |
|---|---|---|
| com.lianda.auth | 8083 | 认证服务,上下文路径 /auth |
| JavaBackend | 8080 | 主后端服务,上下文路径 /api |
| vue-frontend | 8082 | 前端应用,开发服务器端口 |
| FlinkDataSync | - | CDC 数据同步服务(无端口,后台运行) |
src/main/resources/application.properties 中的 server.port=8083src/main/resources/application.properties 和 application-dev.properties 中的 server.port=8080vue.config.js 中的 devServer.port: 8082java -cp target/flink-data-sync-1.0-SNAPSHOT.jar com.lianda.flink.sync.MySqlCdcSync如需修改端口,必须:
FlinkDataSync 是系统的核心服务,必须首先启动!
本项目包含四个服务,启动方式如下:
运行 PowerShell 脚本:
.\start-all.ps1
com.lianda.auth 目录,运行 mvn spring-boot:runJavaBackend 目录,运行 mvn spring-boot:runvue-frontend 目录,运行 npm run serveFlinkDataSync 目录,先运行 mvn clean package -DskipTests 构建,然后运行 java -jar target/flink-data-sync-1.0-SNAPSHOT.jarFlinkDataSync 是基于 Apache Flink 的 CDC(Change Data Capture)数据同步服务,负责实时监控 TugboatCommon 数据库的变化,并将变更同步到 LiandaTugboatMIS 数据库。
FlinkDataSync 监控以下 TugboatCommon 数据库的表:
构建项目:
cd FlinkDataSync
mvn clean package -DskipTests
启动服务:
java -jar target/flink-data-sync-1.0-SNAPSHOT.jar
服务启动成功后会显示以下日志:
Starting execution of job 'MySQL CDC Data Sync'Job MySQL CDC Data Sync switched from state CREATED to RUNNINGReading structure of databaseReceived record from streaming binlog phaseReceived record from streaming binlog phase 表示服务已进入正常运行状态FlinkDataSync/flink-sync.logFlinkDataSync/flink-sync.log.1、flink-sync.log.2 等# 实时查看日志
tail -f FlinkDataSync/flink-sync.log
# 查看最近的日志
tail -n 100 FlinkDataSync/flink-sync.log
# 搜索错误日志
grep -i "error" FlinkDataSync/flink-sync.log
Connecting to MySQL databaseSnapshot step 1/2/3 - ...Received record from streaming binlog phaseERROR 或 Exception配置文件位置:FlinkDataSync/src/main/java/com/lianda/flink/sync/MySqlCdcSync.java
// 源数据库配置
.hostname("192.168.0.77") // MySQL 服务器地址
.port(3306) // MySQL 端口
.databaseList("TugboatCommon") // 监控的数据库
.tableList("TugboatCommon.xxx", ...) // 监控的表列表
.username("root") // 数据库用户名
.password("bowin@2023") // 数据库密码
// 目标数据库配置
MySqlSink("192.168.0.77", 3306, "LiandaTugboatMIS", "root", "bowin@2023")
// 编码配置
properties.setProperty("database.character.set", "utf8mb4");
properties.setProperty("database.collation.name", "utf8mb4_unicode_ci");
properties.setProperty("database.connection.properties", "useUnicode=true&characterEncoding=UTF-8");
// 时区配置
properties.setProperty("database.time_zone", "Asia/Shanghai");
properties.setProperty("database.serverTimezone", "Asia/Shanghai");
ClassNotFoundException 或 NoClassDefFoundErrormvn clean package -DskipTeststarget/flink-data-sync-1.0-SNAPSHOT.jarCommunications link failureThe MySQL server is not configured to use a binlogini
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
binlog-row-image=FULL
// 设置并行度
env.setParallelism(1); // 根据服务器资源调整
// 配置检查点间隔
env.enableCheckpointing(60000); // 60秒
// 配置检查点模式
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
// 使用 RocksDB 状态后端(适用于大状态)
env.setStateBackend(new RocksDBStateBackend("file:///path/to/checkpoints"));
必须严格按照以下顺序启动服务,否则系统将无法正常工作!
第一步:启动 FlinkDataSync(CDC数据同步服务) ⭐ 最重要
bash
cd FlinkDataSync
mvn clean package -DskipTests
java -jar target/flink-data-sync-1.0-SNAPSHOT.jar
第二步:启动 com.lianda.auth(认证服务)
cd com.lianda.auth && mvn spring-boot:run第三步:启动 JavaBackend(主后端服务)
cd JavaBackend && mvn spring-boot:run第四步:启动 vue-frontend(前端应用)
cd vue-frontend && npm run serve启动每个服务后,请按照以下清单检查:
⚠️ 重要提醒:只有FlinkDataSync成功启动后,才能启动其他服务!
CheckCommandStatus 工具查看服务运行状态后端服务(com.lianda.auth、JavaBackend):
前端服务(vue-frontend):
FlinkDataSync:
FlinkDataSync/flink-sync.lognetstat -ano | findstr "端口号" 检查端口是否被占用netstat -ano | findstr "端口号" 查找占用端口的进程taskkill /PID 进程ID 杀死占用进程后端服务:
-Xmx1024m -Xms512mmvn -T 4 spring-boot:run前端服务:
npm run serve --cache使用断点调试:
使用日志调试:
@Slf4j 注解和 logger.info/debug/errorconsole.log/debug/errorposition: fixed 固定定位z-index,确保不会被其他元素遮挡position: fixed 固定标签页头部,避免滚动时被遮挡css
.tabs-header {
position: fixed !important;
top: 64px !important; /* 顶部导航栏高度 */
left: 220px !important; /* 侧边栏宽度 */
right: 0 !important;
z-index: 1000 !important;
}
padding-top,避免被固定头部遮挡
css
.tabs-content {
padding-top: 40px !important; /* 标签页头部高度 */
}
@media (max-width: 768px) {
.tabs-header {
left: 180px !important; /* 小屏幕侧边栏宽度 */
}
} ```
问题1:滚动时固定元素被遮挡
z-index 值,确保固定元素在最上层z-index: 1000 !important;问题2:固定定位元素遮挡内容
padding-top,值为固定元素的高度padding-top: 40px !important;问题3:响应式布局错位
@media 查询调整 left 值!important!important,优先使用更具体的选择器scoped 样式避免全局污染transform 而非 top/left