zhangjf
|
a4aa4b4156
|
feat: 优化打包方式为普通JAR+依赖分离
- pom.xml:
- 添加finalName配置去除版本号
- maven-jar-plugin排除资源文件
- 禁用spring-boot-maven-plugin repackage
- 各服务移除冗余的plugin配置
- assembly.xml:
- 主JAR放根目录(仅服务代码)
- lib目录放依赖JAR
- start.sh:
- 支持java -cp classpath模式启动
- 从service.properties读取MAIN_CLASS
- 向后兼容fat jar模式
- service.properties:
- 所有服务添加MAIN_CLASS配置
优势:
- 主JAR从131MB缩小到103KB
- 多服务部署可共享lib目录
- 资源文件外置便于修改
|
2026-02-22 20:22:27 +08:00 |
|
zhangjf
|
8190887de8
|
feat: 数据库脚本优化、前端部署脚本、租户ID支持
- 数据库脚本优化
- 新增01_create_user.sql创建fundsp用户
- 新增02_grant_user.sql授权脚本
- 新增fund_exp_init.sql、fund_receipt_init.sql
- 修复SQL脚本与实体类一致性
- 密码更新为fundSP@123
- 前端部署脚本
- 新增build-frontend.sh前端构建脚本
- 新增deploy-frontend-nginx.sh Nginx部署脚本
- 打包输出到deploy目录
- 租户ID支持
- fund-admin/fund-mobile支持query参数读取tid
- 新增tenant.ts store管理租户状态
- 请求拦截器添加X-Tenant-Id header
- 启动脚本修复
- 修复INSTANCE_NAME变量替换问题
- 更新所有service.properties配置
- 配置更新
- 更新所有服务数据库密码
- 更新docker-compose.yml配置
|
2026-02-22 19:45:52 +08:00 |
|
zhangjf
|
1225d8387e
|
feat: 配置文件分离为统一配置和个性化配置
- 新增service.properties:每个服务独立的个性化配置
- APP_NAME: 服务名称
- INSTANCE_NAME: 实例名称(多租户场景)
- TENANT_ID: 租户标识
- env.properties:所有服务共用的统一配置
- Nacos/Redis/日志等公共参数
- 加载顺序:先env.properties,后service.properties(个性化覆盖统一)
- 更新assembly.xml:service.properties打包到conf目录
- 更新启动脚本:统一使用load_properties函数加载配置
|
2026-02-22 16:10:03 +08:00 |
|
zhangjf
|
faded43266
|
refactor: 统一日志配置到logback-spring.xml
- logback-spring.xml从环境变量读取日志级别和格式
- 移除各服务application.yml中的logging配置
- env.properties添加LOG_PATH、LOG_LEVEL_ROOT、LOG_LEVEL_APP参数
- 启动脚本start.sh传递日志相关JVM参数
- assembly.xml将env.properties打包到conf目录
|
2026-02-22 15:36:04 +08:00 |
|
zhangjf
|
cb0affa2cf
|
refactor: 补充env.properties配置参数覆盖
- 新增Redis连接池配置参数
- 新增Hikari连接池公共配置参数
- 新增Sentinel配置参数
- 新增网关限流配置参数
- 新增腾讯云COS配置参数
- 新增文件上传配置参数
- 各服务application.yml引用对应环境变量
|
2026-02-22 15:25:17 +08:00 |
|
zhangjf
|
2557cac757
|
refactor: 统一配置参数到env.properties
- 更新env.properties,添加Nacos/Redis/日志/多租户等公共配置
- 各服务application.yml使用环境变量引用公共配置
- 数据库配置保持独立,不纳入统一配置
|
2026-02-22 15:19:48 +08:00 |
|
zhangjf
|
dfce5b0566
|
refactor: 统一脚本管理,优化Assembly打包配置
- 将各服务脚本统一到项目根目录scripts目录
- Assembly配置引用根目录scripts,避免重复
- 脚本自动从目录名推断服务名称
- 排除docker相关配置文件(application-docker.yml)
- 新增env.properties环境变量配置模板
- 更新单机部署文档至v2.1
|
2026-02-22 14:43:41 +08:00 |
|
zhangjf
|
7a3fcb3ed7
|
feat: 使用Maven Assembly实现标准化打包
主要更新:
- 每个服务打包为独立tar.gz,包含bin/lib/conf目录
- bin目录:启动/停止/重启/状态脚本
- lib目录:服务JAR包及所有依赖
- conf目录:配置文件(application.yml等)
新增文件:
- 各模块src/main/assembly/assembly.xml配置
- 各模块src/main/scripts启动脚本
- server-deploy/scripts一键管理脚本
- server-deploy/assembly/assembly.xml模板
更新文档:
- 单机部署文档v2.0,说明assembly打包方式
|
2026-02-22 14:04:57 +08:00 |
|
zhangjf
|
4154b94206
|
fix: 修复Gateway路由配置错误
fund-cust 路由路径配置错误,修正为 /cust/**
|
2026-02-20 19:08:49 +08:00 |
|
zhangjf
|
44e7efdfc0
|
fix: Gateway Token验证修复
1. Gateway Redis database 改为 0(与业务服务一致)
2. TokenInfo 添加 @JsonIgnoreProperties(ignoreUnknown = true)
3. TokenInfo.isExpired() 添加 @JsonIgnore 避免序列化
4. isExpired() 方法增加 null 检查
|
2026-02-20 18:52:54 +08:00 |
|
zhangjf
|
52c926dcd6
|
fix: Gateway添加Nacos服务发现依赖,修复负载均衡器配置
1. fund-gateway pom.xml 添加 spring-cloud-starter-alibaba-nacos-discovery 依赖
2. TenantLoadBalancerAutoConfig 使用 @LoadBalancerClients 注解配置
3. TenantAwareLoadBalancer 增加 serviceId null 检查
|
2026-02-20 18:43:38 +08:00 |
|
zhangjf
|
4af7d712cd
|
fix: Gateway不扫描fund-common避免依赖冲突
|
2026-02-20 18:04:30 +08:00 |
|
zhangjf
|
ef46844bfd
|
fix: 修复服务启动配置问题
- 所有业务服务添加scanBasePackages扫描fund-common
- Gateway添加ReactiveRedisConfig提供ReactiveRedisTemplate
- Gateway排除Servlet相关类和RedisService(需要非响应式RedisTemplate)
- 解决Bean名称冲突(ReactiveRedisConfig)
|
2026-02-20 17:53:12 +08:00 |
|
zhangjf
|
9b3b3538c8
|
feat: API响应头增加traceId和spanId,日志记录spanId作为索引
- TraceContextHolder新增SpanId支持(16位短ID)
- ContextInterceptor在响应头返回X-Trace-Id和X-Span-Id
- 日志格式增加spanId:[traceId][spanId]
- JSON日志增加spanId字段用于ELK采集
- 日志输出示例:[abc123][def456] trace info
|
2026-02-20 11:48:09 +08:00 |
|
zhangjf
|
a8450d181f
|
refactor: 移除X-Tenant-Group相关代码
- TenantGatewayFilter简化为仅记录日志
- 移除application.yml和application-docker.yml中的tenant-group-header配置
|
2026-02-20 11:27:21 +08:00 |
|
zhangjf
|
f3b7576bf1
|
refactor: Token认证从JWT改为UUID+Redis方案
- fund-common: 新增TokenInfo和TokenService类
- fund-sys: AuthServiceImpl改用TokenService,移除JwtUtil
- fund-gateway: 新增TokenAuthFilter和ReactiveTokenService
- 移除JWT依赖,支持主动登出和强制踢下线功能
|
2026-02-20 11:23:32 +08:00 |
|
zhangjf
|
e2007d8b09
|
chore: 从Git追踪中移除target和.vscode目录
|
2026-02-20 11:02:45 +08:00 |
|
zhangjf
|
480c052ff1
|
feat: Docker容器化部署配置
- 添加所有后端服务的application-docker.yml配置文件
- 添加前端fund-admin和fund-mobile的Dockerfile和nginx配置
- 更新docker-compose.yml添加前端服务
- 添加.dockerignore优化构建
- 添加deploy.sh一键部署脚本
|
2026-02-20 10:13:52 +08:00 |
|
zhangjf
|
15e7ed6f1b
|
feat: 所有服务统一配置多租户负载均衡,清理无效配置
1. 业务服务配置(fund-cust/proj/req/exp/receipt)
- 添加 Nacos metadata.tenant-id 配置
- 添加 tenant.routing 配置
- 移除无效的 feign.fund-sys.url 配置
2. 共享服务配置(fund-report/file)
- 添加 tenant.routing.enabled: false
- 共享服务不需要租户路由
3. Gateway 配置清理
- 移除过时的 tenant-group-header 配置
- 移除过时的 group-separator 配置
4. 删除 Docker 配置文件
- 删除 fund-sys/application-docker.yml
- 删除 fund-gateway/application-docker.yml
配置规范:
业务服务: tenant.routing.enabled=true, metadata.tenant-id=${TENANT_ID:}
共享服务: tenant.routing.enabled=false
|
2026-02-19 21:46:11 +08:00 |
|
zhangjf
|
330ec6dea9
|
refactor: 简化多租户路由配置,基于 Nacos 元数据动态匹配
问题:tenant.routing.services 配置在每个服务中重复定义 vip-tenants
解决方案:
1. TenantRoutingProperties 简化
- 移除 services 映射(vip-tenants 列表)
- 保留全局配置:enabled, fallback-to-shared, shared-services
- 路由逻辑改为基于实例元数据动态匹配
2. 配置简化
- Gateway: 只需全局配置,无需定义各服务的 vip-tenants
- 服务实例: 只需在 Nacos metadata 中声明 tenant-group
- 负载均衡器: 从实例 metadata 读取 tenant-group 进行匹配
3. 架构变化
修改前:配置文件定义 vip-tenants 列表
修改后:实例注册时声明 tenant-group,负载均衡器动态匹配
示例:
共享实例 metadata: { tenant-group: "" }
VIP 实例 metadata: { tenant-group: "TENANT_VIP_001" }
请求匹配 → 路由到对应实例
|
2026-02-19 21:18:58 +08:00 |
|
zhangjf
|
2765f3f265
|
feat: 本地开发环境配置多租户路由
问题:fund-gateway 和 fund-sys 的 application.yml 缺少 tenant.routing 配置
修改内容:
1. fund-sys/application.yml
- 添加 tenant.routing 配置
- 配置 VIP 租户列表 (TENANT_VIP_001, TENANT_VIP_002)
- 配置共享服务列表
2. fund-gateway/application.yml
- 添加 Nacos 服务发现配置
- 路由改为 lb:// 协议使用负载均衡
- 添加全局跨域配置
- 添加 tenant.routing 配置
- 添加负载均衡日志级别
|
2026-02-19 21:11:08 +08:00 |
|
zhangjf
|
8e4afcd1a5
|
feat: TenantAwareLoadBalancer 整合 TenantRoutingProperties 配置
问题:TenantRoutingProperties 定义了配置但未被使用
解决方案:
1. TenantAwareLoadBalancer 注入 TenantRoutingProperties
- 使用配置的 tenantHeader 名称
- 使用配置的 buildTenantGroup 方法
- 使用配置的 isSharedService 判断
- 使用配置的 isFallbackToShared 策略
2. 新增功能
- 支持 enabled=false 禁用租户路由
- 共享服务跳过租户过滤
- 可配置是否回退到共享实例
3. 更新测试适配新构造函数
|
2026-02-19 21:02:25 +08:00 |
|
zhangjf
|
2c0f2f8952
|
feat: 服务资源配置文件增加多租户混合模式负载均衡配置
## application-docker.yml 更新
### fund-sys
- Nacos 元数据配置:tenant-id, tenant-group
- 租户路由配置:启用租户感知负载均衡
- VIP 租户列表定义
- 监控标签:tenant_id, tenant_group, instance_type
- 日志格式:增加 tenantId MDC
### fund-gateway
- 全局跨域配置
- 多租户路由配置(所有服务的VIP租户列表)
- 监控和日志增强
## TenantRoutingProperties 更新
- 添加 @ConfigurationProperties 支持 YAML 配置绑定
- 新增 vip-tenants 列表属性
- 新增 fallback-to-shared 回退策略属性
- 新增 getVipTenants(), isVipTenant(), isFallbackToShared() 方法
|
2026-02-19 20:45:03 +08:00 |
|
zhangjf
|
5b80e237b9
|
feat: Docker容器化部署和Prometheus+Grafana监控
## Docker 容器化部署
### 新增文件
- Dockerfile: 多阶段构建镜像,支持 Java 21
- docker-compose.yml: 完整服务编排配置
- 基础设施: MySQL 8.0, Redis 7, Nacos 3.0
- 监控: Prometheus, Grafana
- 业务服务: Gateway + 9个微服务
- docker/.env: 环境变量配置
- docker/mysql/init/01-init.sql: 数据库初始化脚本
### Docker 特性
- 多阶段构建优化镜像大小
- 非 root 用户运行服务
- 健康检查配置
- 统一时区设置 (Asia/Shanghai)
## Prometheus + Grafana 监控
### Prometheus 配置
- docker/prometheus/prometheus.yml: 服务发现配置
- docker/prometheus/rules/alerts.yml: 告警规则
- 服务可用性告警
- JVM 内存告警
- HTTP 请求告警
- 数据库连接池告警
- 系统资源告警
### Grafana 配置
- docker/grafana/provisioning/: 数据源和Dashboard自动导入
- docker/grafana/dashboards/fund-platform-dashboard.json
- 服务概览面板
- JVM 内存监控
- 数据库连接池监控
### Spring Boot Actuator 集成
- pom.xml: 添加 spring-boot-starter-actuator 和 micrometer-registry-prometheus
- application-docker.yml: Prometheus 端点配置
## 服务端口规划
- Gateway: 8000
- fund-sys: 8100
- fund-cust: 8200
- fund-proj: 8300
- fund-req: 8400
- fund-exp: 8500
- fund-receipt: 8600
- fund-report: 8700
- fund-file: 8800
- Prometheus: 9090
- Grafana: 3000
- Nacos: 8848
|
2026-02-19 18:48:15 +08:00 |
|
zhangjf
|
10eca3fb35
|
feat: 实现多租户架构完整能力
## 新增功能
### 1. 多租户核心组件
- TenantRoutingProperties: 租户路由配置属性
- TenantAwareLoadBalancer: 租户感知负载均衡器
- TenantLineHandlerImpl: MyBatis Plus 租户插件
- TenantIgnoreHelper: 忽略租户过滤工具类
- NacosMetadataConfig: Nacos 元数据自动注册
### 2. Gateway 租户过滤器
- TenantGatewayFilter: 从 JWT 提取租户信息写入请求头
- 透传 X-Tenant-Id、X-Tenant-Group、X-User-Id、X-Username
### 3. 支持的部署模式
- 一库多租户(SaaS 模式): 通过 tenant_id 字段隔离
- 一库一租户(私有化): 独立服务实例和数据库
- 混合模式: VIP 租户专属实例 + 普通租户共享实例
### 4. Nacos 3.0 适配
- 所有业务模块添加 username/password 认证配置
- 服务实例自动注册租户标签
## 问题修复
- #8: FeignClient 硬编码 URL 导致 Nacos 服务发现失效
- #9: Nacos 3.0 客户端缺少 username/password 认证配置
- fund-exp expenseType 字段类型从 Integer 改为 Long
## 测试
- TenantAwareLoadBalancerTest: 负载均衡器单元测试
- 混合模式集成测试脚本
|
2026-02-19 18:10:16 +08:00 |
|
zhangjf
|
0c87462b68
|
fix: 修复fund-req/fund-exp/fund-receipt模块的mybatis-plus依赖和数据库配置
|
2026-02-17 16:42:21 +08:00 |
|
zhangjf
|
5ebbb13a51
|
fix: 修复API测试中发现的问题
## 问题修复
### 1. 上下文拦截器
- ContextInterceptor: 从HTTP Header提取租户ID和用户ID到ThreadLocal
- WebMvcConfig: 注册拦截器到Spring MVC
### 2. 数据库配置
- fund-cust/application.yml: 修复MySQL密码默认值
- fund-proj/application.yml: 修复MySQL密码默认值
### 3. Gateway配置
- application.yml: 删除空的Sentinel datasource配置
- SentinelRuleConfig: 删除重复的sentinelGatewayFilter Bean
### 4. 数据库表
- requirement.sql: 修复主键列名为id,与BaseEntity保持一致
### 5. MyBatis-Plus依赖
- fund-cust/pom.xml: 使用mybatis-plus-spring-boot3-starter
- fund-proj/pom.xml: 使用mybatis-plus-spring-boot3-starter
|
2026-02-17 16:12:46 +08:00 |
|
zhangjf
|
23c8f81ebd
|
feat: P3任务实施 - Sentinel熔断降级/HikariCP优化/AES加密
## 新增功能
### D.2 Sentinel熔断降级
- SentinelConfig: 自定义熔断降级响应
- SentinelRuleConfig: 网关流控规则配置
- 添加sentinel依赖到fund-gateway
### F.2 HikariCP连接池优化
- 完善HikariCP配置参数
- HikariMonitorConfig: 连接池监控配置
- 每5分钟打印连接池状态
### H.3 敏感数据加密
- AESUtils: AES-256-GCM加密工具类
- 支持加密/解密/手机号脱敏/身份证脱敏/银行卡脱敏
- 使用SHA-256生成密钥
### 单元测试
- AESUtilsTest: 10个测试用例验证加密功能
- 测试覆盖: 加密解密/中文/长文本/错误密钥/多次加密/脱敏
|
2026-02-17 15:06:22 +08:00 |
|
zhangjf
|
5d4cdd5c33
|
fix: RateLimitConfig添加@Primary注解解决多KeyResolver冲突
|
2026-02-17 14:55:25 +08:00 |
|
zhangjf
|
281bbc992d
|
feat: 实现资金平台核心功能模块
## 新增功能
### Gateway增强 (P0)
- GlobalLogFilter: 全局日志过滤器,生成TraceId
- JwtAuthFilter: JWT鉴权过滤器,白名单机制
- RateLimitConfig: 基于Redis的限流配置
### 权限管理模块 (P1/P3)
- A.1 用户管理: UserDTO/UserVO/UserService/UserController
- A.2 角色管理: RoleDTO/RoleVO/RoleService/RoleController
- A.3 菜单管理: MenuDTO/MenuVO/MenuService/MenuController
- A.4 部门管理: DeptDTO/DeptVO/DeptService/DeptController
### 业务模块 (P1/P3)
- B.1 fund-req用款申请: 完整审批流程
- B.2 fund-exp支出管理: 支付确认流程
- B.3 fund-receipt收款管理: 确认核销流程
### 服务治理 (P1/P2)
- D.1 Nacos服务注册: 所有服务集成Nacos
- I.1 Redis缓存: RedisService/RedisConfig
- E.1 ELK日志: logback-spring.xml JSON格式
## 技术栈
- Spring Cloud Gateway 4.0.0
- Spring Cloud Alibaba 2023.0.0
- MyBatis-Plus 3.5.5
- JWT (jjwt 0.11.5)
- Redis + Lettuce
|
2026-02-17 14:30:04 +08:00 |
|
zhangjf
|
a17307a96e
|
feat: 完成资金服务平台六步实施 - 数据库初始化+服务启动+网关配置
本次提交包含:
1. 11个Maven模块全部创建并编译通过
2. 4个数据库初始化脚本(14张表)
3. fund-sys服务启动验证
4. Gateway路由配置完成
5. API端到端测试通过
核心能力:
- 多租户数据隔离(MyBatis-Plus)
- JWT认证+BCrypt密码
- 统一返回结构
- 参数校验
- OpenFeign示例
- API网关统一入口
修复:
- MyBatis-Plus与Spring Boot 3兼容性问题
- BaseEntity字段类型统一(Long)
- Gateway版本兼容性
|
2026-02-17 12:53:55 +08:00 |
|