607 lines
12 KiB
Markdown
607 lines
12 KiB
Markdown
# Salesforce数据集成模块 - 技术上下文
|
||
|
||
## 技术栈概览
|
||
|
||
本模块基于Java 22和Spring Boot框架构建,采用Maven作为构建工具,使用MyBatis作为持久层框架,集成Salesforce Partner API,实现高效、可靠的数据集成解决方案。
|
||
|
||
## 1. 开发环境
|
||
|
||
### 1.1 JDK版本
|
||
- **版本**:JDK 22
|
||
- **供应商**:OpenJDK / Oracle JDK
|
||
- **特性**:
|
||
- 支持最新的Java语言特性
|
||
- 性能优化
|
||
- 安全性增强
|
||
|
||
### 1.2 构建工具
|
||
- **工具**:Maven
|
||
- **版本**:3.6+
|
||
- **配置**:
|
||
- 编译源码版本:22
|
||
- 编译目标版本:22
|
||
- 编码:UTF-8
|
||
|
||
### 1.3 IDE
|
||
- **推荐IDE**:IntelliJ IDEA
|
||
- **插件**:
|
||
- Lombok Plugin
|
||
- MyBatis Plugin
|
||
- Spring Boot Plugin
|
||
|
||
## 2. 核心框架
|
||
|
||
### 2.1 Spring Boot
|
||
- **版本**:根据父模块版本
|
||
- **核心依赖**:
|
||
- spring-boot-starter-web:Web开发
|
||
- spring-boot-starter-aop:AOP支持
|
||
- spring-boot-starter-validation:参数校验
|
||
- spring-boot-starter-cache:缓存支持
|
||
- spring-boot-starter-actuator:监控支持
|
||
|
||
**关键配置**:
|
||
- 自动配置
|
||
- 嵌入式服务器(Tomcat)
|
||
- 配置外部化
|
||
- 健康检查
|
||
|
||
### 2.2 Spring MVC
|
||
- **作用**:Web层框架
|
||
- **特性**:
|
||
- RESTful API支持
|
||
- 请求映射
|
||
- 参数绑定
|
||
- 异常处理
|
||
- 拦截器
|
||
|
||
### 2.3 Spring Security
|
||
- **作用**:安全框架
|
||
- **特性**:
|
||
- 认证授权
|
||
- 权限控制
|
||
- 方法级安全
|
||
- CSRF防护
|
||
|
||
### 2.4 Spring AOP
|
||
- **作用**:面向切面编程
|
||
- **特性**:
|
||
- 日志记录
|
||
- 事务管理
|
||
- 权限控制
|
||
- 性能监控
|
||
|
||
### 2.5 Spring Cache
|
||
- **作用**:缓存抽象
|
||
- **特性**:
|
||
- 缓存注解
|
||
- 缓存管理器
|
||
- 多级缓存支持
|
||
|
||
## 3. 持久层框架
|
||
|
||
### 3.1 MyBatis
|
||
- **版本**:根据父模块版本
|
||
- **核心依赖**:
|
||
- mybatis-spring-boot-starter:MyBatis集成
|
||
- mybatis-plus-boot-starter:MyBatis-Plus增强
|
||
|
||
**特性**:
|
||
- SQL映射
|
||
- 动态SQL
|
||
- 结果映射
|
||
- 缓存支持
|
||
- 插件机制
|
||
|
||
**配置**:
|
||
- Mapper扫描
|
||
- 类型别名
|
||
- 配置文件位置
|
||
|
||
### 3.2 MyBatis-Plus
|
||
- **作用**:MyBatis增强工具
|
||
- **特性**:
|
||
- 通用Mapper
|
||
- 通用Service
|
||
- 代码生成器
|
||
- 分页插件
|
||
- 性能分析
|
||
|
||
## 4. 数据库
|
||
|
||
### 4.1 数据库类型
|
||
- **推荐**:MySQL 8.0+
|
||
- **兼容**:PostgreSQL、Oracle、SQL Server
|
||
|
||
### 4.2 连接池
|
||
- **框架**:HikariCP(Spring Boot默认)
|
||
- **配置**:
|
||
- 最大连接数:10
|
||
- 最小空闲连接:5
|
||
- 连接超时:30000ms
|
||
- 空闲超时:600000ms
|
||
|
||
### 4.3 数据库特性
|
||
- **事务支持**:ACID
|
||
- **隔离级别**:READ_COMMITTED
|
||
- **字符集**:UTF-8
|
||
- **存储引擎**:InnoDB
|
||
|
||
## 5. Salesforce API集成
|
||
|
||
### 5.1 Salesforce Partner API
|
||
- **版本**:v56.0+
|
||
- **依赖**:
|
||
- salesforce-partner(本地jar包)
|
||
- 路径:src/main/resources/lib/partner.jar
|
||
|
||
**特性**:
|
||
- SOAP协议
|
||
- 对象元数据查询
|
||
- 数据查询(SOQL)
|
||
- 数据操作(DML)
|
||
|
||
### 5.2 Salesforce REST API
|
||
- **版本**:v56.0+
|
||
- **特性**:
|
||
- RESTful接口
|
||
- JSON格式
|
||
- OAuth 2.0认证
|
||
- 限流控制
|
||
|
||
### 5.3 Salesforce Bulk API
|
||
- **版本**:
|
||
- Bulk API V1:基于SOAP
|
||
- Bulk API V2:基于REST
|
||
|
||
**特性**:
|
||
- 批量数据操作
|
||
- 异步处理
|
||
- 大数据量支持
|
||
|
||
## 6. 核心依赖库
|
||
|
||
### 6.1 日志框架
|
||
- **框架**:SLF4J + Logback
|
||
- **依赖**:
|
||
- spring-boot-starter-logging
|
||
- lombok(日志注解)
|
||
|
||
**特性**:
|
||
- 日志级别控制
|
||
- 日志输出格式
|
||
- 日志文件滚动
|
||
- 异步日志
|
||
|
||
### 6.2 JSON处理
|
||
- **框架**:Jackson
|
||
- **依赖**:
|
||
- spring-boot-starter-web(包含Jackson)
|
||
|
||
**特性**:
|
||
- JSON序列化/反序列化
|
||
- 日期时间处理
|
||
- 自定义序列化器
|
||
|
||
### 6.3 工具类库
|
||
- **Apache Commons Lang3**:
|
||
- 字符串处理
|
||
- 对象处理
|
||
- 类型转换
|
||
|
||
- **Apache Commons Collections**:
|
||
- 集合工具
|
||
- 集合操作
|
||
|
||
- **Hutool**(可选):
|
||
- 丰富的工具类
|
||
- 简化开发
|
||
|
||
### 6.4 参数校验
|
||
- **框架**:Jakarta Validation
|
||
- **依赖**:
|
||
- spring-boot-starter-validation
|
||
|
||
**特性**:
|
||
- 参数校验注解
|
||
- 自定义校验器
|
||
- 校验分组
|
||
|
||
### 6.5 API文档
|
||
- **框架**:Swagger/OpenAPI 3
|
||
- **依赖**:
|
||
- springdoc-openapi-starter-webmvc-ui
|
||
|
||
**特性**:
|
||
- 接口文档生成
|
||
- 在线测试
|
||
- 接口版本管理
|
||
|
||
### 6.6 HTTP客户端
|
||
- **框架**:OkHttp / Apache HttpClient
|
||
- **用途**:
|
||
- REST API调用
|
||
- 文件上传下载
|
||
|
||
## 7. 中间件
|
||
|
||
### 7.1 缓存中间件
|
||
- **本地缓存**:Caffeine(Spring Boot默认)
|
||
- **分布式缓存**:Redis(可选)
|
||
|
||
**Caffeine配置**:
|
||
- 最大容量:10000
|
||
- 过期时间:30分钟
|
||
- 基于大小的淘汰策略
|
||
|
||
**Redis配置**(可选):
|
||
- 连接池:Lettuce
|
||
- 序列化:Jackson
|
||
- 过期策略:TTL
|
||
|
||
### 7.2 消息队列(可选)
|
||
- **框架**:RabbitMQ / Kafka
|
||
- **用途**:
|
||
- 异步任务处理
|
||
- 事件驱动
|
||
- 解耦系统
|
||
|
||
### 7.3 任务调度
|
||
- **框架**:Spring @Scheduled
|
||
- **特性**:
|
||
- Cron表达式
|
||
- 固定延迟
|
||
- 固定频率
|
||
|
||
**定时任务**:
|
||
- 元数据变更拉取任务
|
||
- 限流重置任务
|
||
- 数据同步任务
|
||
|
||
### 7.4 监控中间件
|
||
- **框架**:Spring Boot Actuator
|
||
- **特性**:
|
||
- 健康检查
|
||
- 指标收集
|
||
- 端点管理
|
||
|
||
**端点**:
|
||
- /actuator/health:健康检查
|
||
- /actuator/metrics:指标信息
|
||
- /actuator/info:应用信息
|
||
|
||
## 8. 开发工具
|
||
|
||
### 8.1 代码生成
|
||
- **工具**:MyBatis-Plus Generator
|
||
- **功能**:
|
||
- Entity生成
|
||
- Mapper生成
|
||
- Service生成
|
||
- Controller生成
|
||
|
||
### 8.2 版本控制
|
||
- **工具**:Git
|
||
- **平台**:GitLab / GitHub
|
||
|
||
### 8.3 CI/CD
|
||
- **工具**:Jenkins / GitLab CI
|
||
- **流程**:
|
||
- 代码构建
|
||
- 单元测试
|
||
- 代码扫描
|
||
- 部署
|
||
|
||
## 9. 测试框架
|
||
|
||
### 9.1 单元测试
|
||
- **框架**:JUnit 5
|
||
- **依赖**:
|
||
- spring-boot-starter-test
|
||
- mockito-core
|
||
|
||
**特性**:
|
||
- 测试注解
|
||
- Mock支持
|
||
- 断言库
|
||
|
||
### 9.2 集成测试
|
||
- **框架**:Spring Boot Test
|
||
- **特性**:
|
||
- 嵌入式数据库
|
||
- 测试配置
|
||
- 测试生命周期
|
||
|
||
### 9.3 性能测试
|
||
- **工具**:JMeter / Gatling
|
||
- **用途**:
|
||
- 压力测试
|
||
- 性能基准测试
|
||
|
||
## 10. 部署环境
|
||
|
||
### 10.1 应用服务器
|
||
- **容器**:Tomcat(Spring Boot内置)
|
||
- **版本**:9.0+
|
||
- **配置**:
|
||
- 最大线程数:200
|
||
- 连接超时:20000ms
|
||
- 接收缓冲区:8192
|
||
|
||
### 10.2 容器化
|
||
- **工具**:Docker
|
||
- **镜像**:OpenJDK 22
|
||
- **编排**:Docker Compose / Kubernetes
|
||
|
||
### 10.3 操作系统
|
||
- **推荐**:Linux(CentOS 7+ / Ubuntu 18.04+)
|
||
- **兼容**:Windows Server、macOS
|
||
|
||
## 11. 配置管理
|
||
|
||
### 11.1 配置文件
|
||
- **格式**:YAML / Properties
|
||
- **位置**:
|
||
- application.yml:主配置
|
||
- application-dev.yml:开发环境
|
||
- application-test.yml:测试环境
|
||
- application-prod.yml:生产环境
|
||
|
||
### 11.2 配置中心(可选)
|
||
- **工具**:Spring Cloud Config / Nacos
|
||
- **特性**:
|
||
- 配置集中管理
|
||
- 配置动态刷新
|
||
- 配置版本管理
|
||
|
||
## 12. 日志管理
|
||
|
||
### 12.1 日志级别
|
||
- **TRACE**:最详细的日志信息
|
||
- **DEBUG**:调试信息
|
||
- **INFO**:一般信息
|
||
- **WARN**:警告信息
|
||
- **ERROR**:错误信息
|
||
|
||
### 12.2 日志输出
|
||
- **控制台输出**:开发环境
|
||
- **文件输出**:生产环境
|
||
- **日志文件**:
|
||
- application.log:应用日志
|
||
- error.log:错误日志
|
||
- access.log:访问日志
|
||
|
||
### 12.3 日志格式
|
||
```
|
||
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
|
||
```
|
||
|
||
## 13. 监控与告警
|
||
|
||
### 13.1 应用监控
|
||
- **工具**:Spring Boot Actuator + Prometheus
|
||
- **指标**:
|
||
- JVM指标
|
||
- HTTP指标
|
||
- 数据库指标
|
||
- 自定义指标
|
||
|
||
### 13.2 日志监控
|
||
- **工具**:ELK Stack(Elasticsearch + Logstash + Kibana)
|
||
- **特性**:
|
||
- 日志收集
|
||
- 日志存储
|
||
- 日志分析
|
||
- 日志可视化
|
||
|
||
### 13.3 告警通知
|
||
- **工具**:AlertManager / 钉钉 / 邮件
|
||
- **告警规则**:
|
||
- 应用异常
|
||
- 性能下降
|
||
- 资源不足
|
||
|
||
## 14. 性能优化
|
||
|
||
### 14.1 JVM优化
|
||
- **堆内存**:-Xms2g -Xmx2g
|
||
- **新生代**:-Xmn512m
|
||
- **垃圾回收器**:G1GC
|
||
- **GC日志**:-Xlog:gc*
|
||
|
||
### 14.2 数据库优化
|
||
- **索引优化**:合理创建索引
|
||
- **SQL优化**:避免慢查询
|
||
- **连接池优化**:调整连接池大小
|
||
- **分库分表**:大数据量场景
|
||
|
||
### 14.3 缓存优化
|
||
- **多级缓存**:本地缓存 + 分布式缓存
|
||
- **缓存预热**:启动时加载热点数据
|
||
- **缓存更新**:定时刷新或事件驱动
|
||
|
||
## 15. 安全措施
|
||
|
||
### 15.1 认证安全
|
||
- **方式**:JWT / OAuth 2.0
|
||
- **加密**:AES-256
|
||
- **过期时间**:2小时
|
||
|
||
### 15.2 通信安全
|
||
- **协议**:HTTPS
|
||
- **证书**:TLS 1.2+
|
||
- **加密算法**:AES-256
|
||
|
||
### 15.3 数据安全
|
||
- **加密存储**:敏感数据加密
|
||
- **脱敏展示**:日志和接口脱敏
|
||
- **备份策略**:定期备份
|
||
|
||
## 16. 依赖管理
|
||
|
||
### 16.1 Maven依赖
|
||
|
||
**核心依赖**:
|
||
```xml
|
||
<dependencies>
|
||
<!-- Spring Boot Starter -->
|
||
<dependency>
|
||
<groupId>org.springframework.boot</groupId>
|
||
<artifactId>spring-boot-starter-web</artifactId>
|
||
</dependency>
|
||
|
||
<dependency>
|
||
<groupId>org.springframework.boot</groupId>
|
||
<artifactId>spring-boot-starter-aop</artifactId>
|
||
</dependency>
|
||
|
||
<!-- MyBatis -->
|
||
<dependency>
|
||
<groupId>com.baomidou</groupId>
|
||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||
</dependency>
|
||
|
||
<!-- Salesforce Partner API -->
|
||
<dependency>
|
||
<groupId>salesforce</groupId>
|
||
<artifactId>salesforce-partner</artifactId>
|
||
<version>0.0.1</version>
|
||
<scope>system</scope>
|
||
<systemPath>${project.basedir}/src/main/resources/lib/partner.jar</systemPath>
|
||
</dependency>
|
||
|
||
<!-- Lombok -->
|
||
<dependency>
|
||
<groupId>org.projectlombok</groupId>
|
||
<artifactId>lombok</artifactId>
|
||
<optional>true</optional>
|
||
</dependency>
|
||
|
||
<!-- Swagger -->
|
||
<dependency>
|
||
<groupId>org.springdoc</groupId>
|
||
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
|
||
</dependency>
|
||
|
||
<!-- Validation -->
|
||
<dependency>
|
||
<groupId>org.springframework.boot</groupId>
|
||
<artifactId>spring-boot-starter-validation</artifactId>
|
||
</dependency>
|
||
|
||
<!-- Commons -->
|
||
<dependency>
|
||
<groupId>org.apache.commons</groupId>
|
||
<artifactId>commons-lang3</artifactId>
|
||
</dependency>
|
||
|
||
<!-- Test -->
|
||
<dependency>
|
||
<groupId>org.springframework.boot</groupId>
|
||
<artifactId>spring-boot-starter-test</artifactId>
|
||
<scope>test</scope>
|
||
</dependency>
|
||
</dependencies>
|
||
```
|
||
|
||
### 16.2 版本管理
|
||
- **父模块**:datai-scene-salesforce
|
||
- **版本号**:1.0.0
|
||
- **版本策略**:统一版本管理
|
||
|
||
## 17. 开发规范
|
||
|
||
### 17.1 代码规范
|
||
- **命名规范**:驼峰命名法
|
||
- **注释规范**:JavaDoc
|
||
- **格式规范**:Google Java Style Guide
|
||
- **检查工具**:Checkstyle / SpotBugs
|
||
|
||
### 17.2 Git规范
|
||
- **分支策略**:Git Flow
|
||
- **提交规范**:Conventional Commits
|
||
- **代码审查**:Pull Request
|
||
|
||
### 17.3 文档规范
|
||
- **API文档**:Swagger/OpenAPI
|
||
- **技术文档**:Markdown
|
||
- **架构文档**:C4 Model
|
||
|
||
## 18. 技术债务
|
||
|
||
### 18.1 已知问题
|
||
- partner.jar使用system scope,不利于依赖管理
|
||
- 缺少单元测试覆盖
|
||
- 缺少性能基准测试
|
||
|
||
### 18.2 改进计划
|
||
- 将partner.jar发布到私有Maven仓库
|
||
- 增加单元测试覆盖率到80%+
|
||
- 建立性能基准测试
|
||
- 引入代码质量扫描工具
|
||
|
||
## 19. 技术选型理由
|
||
|
||
### 19.1 为什么选择Spring Boot?
|
||
- 成熟稳定,社区活跃
|
||
- 开箱即用,配置简单
|
||
- 生态完善,集成方便
|
||
- 微服务友好
|
||
|
||
### 19.2 为什么选择MyBatis?
|
||
- SQL控制灵活
|
||
- 性能优秀
|
||
- 学习成本低
|
||
- 适合复杂查询
|
||
|
||
### 19.3 为什么选择Salesforce Partner API?
|
||
- 功能全面
|
||
- 稳定可靠
|
||
- 文档完善
|
||
- 社区支持好
|
||
|
||
### 19.4 为什么选择JDK 22?
|
||
- 最新特性
|
||
- 性能优化
|
||
- 长期支持
|
||
- 向前兼容
|
||
|
||
## 20. 未来技术演进
|
||
|
||
### 20.1 短期计划(3-6个月)
|
||
- 引入Redis缓存
|
||
- 增加单元测试
|
||
- 优化性能
|
||
- 完善监控
|
||
|
||
### 20.2 中期计划(6-12个月)
|
||
- 引入消息队列
|
||
- 支持分布式部署
|
||
- 引入配置中心
|
||
- 优化架构
|
||
|
||
### 20.3 长期计划(12+个月)
|
||
- 支持云原生
|
||
- 引入Service Mesh
|
||
- 支持多云部署
|
||
- 构建数据集成平台
|
||
|
||
## 21. 技术支持
|
||
|
||
### 21.1 官方文档
|
||
- Spring Boot:https://spring.io/projects/spring-boot
|
||
- MyBatis:https://mybatis.org/mybatis-3/
|
||
- Salesforce API:https://developer.salesforce.com/docs
|
||
|
||
### 21.2 社区资源
|
||
- Stack Overflow
|
||
- GitHub Issues
|
||
- 技术博客
|
||
- 技术论坛
|
||
|
||
### 21.3 内部资源
|
||
- 技术文档
|
||
- 代码仓库
|
||
- 知识库
|
||
- 培训材料
|