mirror of
https://github.com/yanlongqi/jhinno-openapi-java-sdk.git
synced 2026-03-22 06:15:10 +08:00
fix: 统一项目版本号并修复Maven Central发布配置
- 将父项目版本从2.0.5升级到2.0.6
- 移除子项目中的硬编码版本号,改为继承父项目版本
- 将内部依赖引用改为使用${project.version}变量
- 添加RELEASE-2.0.6.md发布说明文档
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
445
RELEASE-2.0.6.md
Normal file
445
RELEASE-2.0.6.md
Normal file
@@ -0,0 +1,445 @@
|
||||
# 景行 OpenAPI SDK for Java Release 2.0.6 发布说明
|
||||
|
||||
**发布日期**: 2025年11月22日
|
||||
**版本号**: Release 2.0.6
|
||||
**支持的JH_Appform版本**: JH_Appform_6.5_Release
|
||||
|
||||
---
|
||||
|
||||
## 📋 版本概述
|
||||
|
||||
景行 OpenAPI SDK for Java Release 2.0.6 是一个重要的功能优化版本,主要包含API使用体验提升、性能优化和稳定性改进。此版本进一步简化了API调用方式,修复了资源管理和线程安全问题,并完善了文档和使用说明。
|
||||
|
||||
### 🎯 版本亮点
|
||||
|
||||
- **✨ 简化API调用**: 新增大量重载方法,支持自动用户名获取
|
||||
- **🔧 架构优化**: 重构API请求处理架构,提升代码可维护性
|
||||
- **🐛 稳定性提升**: 修复HTTP连接泄露和Token缓存线程安全问题
|
||||
- **📚 文档完善**: 全面更新使用文档和示例代码
|
||||
- **⚡ 性能提升**: 优化HTTP客户端配置和连接池管理
|
||||
|
||||
---
|
||||
|
||||
## 🚀 新增功能
|
||||
|
||||
### 1. API执行器重载方法支持
|
||||
|
||||
为所有API执行器添加了**65个重载方法**,支持自动用户名获取机制:
|
||||
|
||||
#### 应用API (JHAppApiExecution) - 21个重载方法
|
||||
- 桌面应用操作:`desktopStart()`, `desktopInfo()`, `desktopStop()`, `desktopReset()`等
|
||||
- 应用信息获取:`getAppList()`, `getAppInfo()`, `getAppStoreInfo()`等
|
||||
- 会话管理:`desktopList()`, `sessionInfo()`, `sessionKill()`等
|
||||
- 应用标签操作:`getUseLabelInfo()`, `setLabelInfo()`, `removeLabelInfo()`等
|
||||
|
||||
#### 文件API (JHFileApiExecution) - 26个重载方法
|
||||
- 文件基础操作:`getFileList()`, `getFileInfo()`, `createDir()`, `remove()`等
|
||||
- 文件上传下载:`upload()`, `download()`, `append()`等
|
||||
- 文件访问控制:`aclAdd()`, `aclRemove()`, `aclList()`等
|
||||
- 文件搜索和同步:`search()`, `sync()`, `searchAs()`, `syncAs()`等
|
||||
|
||||
#### 作业API (JHJobApiExecution) - 调用优化
|
||||
- 作业操作:`submit()`, `start()`, `stop()`, `hold()`, `release()`等
|
||||
- 作业信息:`getJobInfo()`, `getJobHistoryInfo()`, `getJobStatus()`等
|
||||
- 作业数据:`getJobSpoolerData()`, `getJobAppFormItem()`, `getJobsActions()`等
|
||||
|
||||
#### 用户API (JHUserApiExecution) - 8个重载方法
|
||||
- 用户管理:`addUser()`, `updateUser()`, `deleteUser()`, `getUserInfo()`等
|
||||
- 批量操作:`getUserList()`, `getDepartmentUserList()`等
|
||||
|
||||
#### 部门API (JHDepartmentApiExecution) - 4个重载方法
|
||||
- 部门管理:`addDepartment()`, `updateDepartment()`, `deleteDepartment()`等
|
||||
- 部门信息:`getDepartmentList()`, `getDepartmentTree()`等
|
||||
|
||||
#### 数据API (JHDataApiExecution) - 6个重载方法
|
||||
- 数据查询:`getJobSpoolerData()`, `getJobAppFormItem()`, `getJobsActions()`等
|
||||
|
||||
### 2. 全局用户获取机制
|
||||
|
||||
新增`JHApiRequestHandler`接口,支持全局用户名配置:
|
||||
|
||||
```java
|
||||
@Configuration
|
||||
public class ApiConfig implements JHApiRequestHandler {
|
||||
@Override
|
||||
public String getCurrentUserName() {
|
||||
return "yanlongqi";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
配置后,所有API调用都可省略用户名参数:
|
||||
|
||||
```java
|
||||
// 旧方式(仍然支持)
|
||||
List<FileInfo> list1 = fileApiExecution.getFileList("jhadmin", "$HOME");
|
||||
|
||||
// 新方式(推荐)
|
||||
List<FileInfo> list2 = fileApiExecution.getFileList("$HOME");
|
||||
```
|
||||
|
||||
### 3. 文档全面升级
|
||||
|
||||
- **README文档完善**: 更新使用说明,添加JH_Appform_6.5_Release支持
|
||||
- **Spring配置优化**: 修正init-method配置,新增全局用户获取配置示例
|
||||
- **测试代码标准化**: 统一API执行器获取方式,提高代码可读性
|
||||
- **依赖版本更新**: 更新至2.0.6版本,支持最新功能
|
||||
|
||||
---
|
||||
|
||||
## 🔧 架构改进
|
||||
|
||||
### 1. API请求处理架构重构
|
||||
|
||||
#### JHApiExecutionManage 增强
|
||||
- **配置灵活化**: 支持Lambda表达式配置API执行器
|
||||
- **类型安全**: 使用泛型确保类型安全的API执行器获取
|
||||
- **自动注入**: 统一管理所有API执行器的创建和配置
|
||||
|
||||
#### HTTP客户端优化
|
||||
- **连接池配置**: 优化HTTP连接池参数,提升性能
|
||||
- **超时设置**: 合理配置连接和读取超时时间
|
||||
- **编码统一**: 统一UTF-8编码处理
|
||||
|
||||
### 2. JHRequestExecution 架构升级
|
||||
|
||||
- **异常处理增强**: 完善异常分类和处理机制
|
||||
- **响应处理优化**: 改进HTTP响应解析和错误处理
|
||||
- **资源管理**: 优化HTTP连接资源的生命周期管理
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Bug修复
|
||||
|
||||
### 1. HTTP连接资源泄露修复
|
||||
|
||||
**问题描述**: 在某些情况下,HTTP响应流没有正确关闭,导致连接池资源泄露。
|
||||
|
||||
**修复方案**:
|
||||
```java
|
||||
// 修复前 - 可能的资源泄露
|
||||
InputStream inputStream = httpResponse.getEntity().getContent();
|
||||
// 业务处理...
|
||||
|
||||
// 修复后 - 使用try-with-resources确保资源释放
|
||||
try (InputStream inputStream = httpResponse.getEntity().getContent()) {
|
||||
// 业务处理...
|
||||
} finally {
|
||||
EntityUtils.consume(httpResponse.getEntity());
|
||||
}
|
||||
```
|
||||
|
||||
**修复效果**:
|
||||
- ✅ 消除HTTP连接泄露风险
|
||||
- ✅ 提高连接池利用率
|
||||
- ✅ 增强系统稳定性
|
||||
|
||||
### 2. Token缓存线程安全修复
|
||||
|
||||
**问题描述**: 在高并发场景下,Token缓存操作存在线程安全问题,可能导致重复创建Token。
|
||||
|
||||
**修复方案**:
|
||||
```java
|
||||
// 修复前 - 线程不安全的缓存操作
|
||||
if (tokenInfo == null) {
|
||||
tokenInfo = createNewToken(); // 可能多线程同时执行
|
||||
}
|
||||
|
||||
// 修复后 - 使用原子操作和双重检查锁定
|
||||
tokenInfo = tokenCache.computeIfAbsent(username, k -> {
|
||||
synchronized (this) {
|
||||
return createNewTokenInfo(k, authType, accessKey, accessKeySecret);
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
**修复效果**:
|
||||
- ✅ 解决多线程环境下的Token竞争问题
|
||||
- ✅ 减少重复Token请求
|
||||
- ✅ 提升高并发场景下系统稳定性
|
||||
|
||||
---
|
||||
|
||||
## ⚡ 性能提升
|
||||
|
||||
### 1. HTTP连接优化
|
||||
|
||||
- **连接复用**: 优化HTTP连接池配置,提高连接复用率
|
||||
- **资源管理**: 确保HTTP响应及时释放,减少资源占用
|
||||
- **超时控制**: 合理配置超时参数,避免长时间等待
|
||||
|
||||
### 2. Token缓存优化
|
||||
|
||||
- **原子操作**: 使用线程安全的数据结构操作Token缓存
|
||||
- **减少竞争**: 通过双重检查锁定减少不必要的同步开销
|
||||
- **缓存命中率**: 优化缓存策略,提高Token缓存命中率
|
||||
|
||||
### 3. JSON序列化优化
|
||||
|
||||
- **输出格式化**: 改进JSON序列化输出,提升可读性
|
||||
- **性能优化**: 优化JsonUtil实现,减少序列化开销
|
||||
|
||||
---
|
||||
|
||||
## 📦 兼容性说明
|
||||
|
||||
### 1. API兼容性
|
||||
|
||||
**✅ 完全向后兼容**: 所有现有API调用方式保持不变
|
||||
|
||||
```java
|
||||
// 现有代码无需修改,继续工作
|
||||
List<FileInfo> files = fileApiExecution.getFileList("admin", "/home");
|
||||
```
|
||||
|
||||
**🆕 新增功能可选**: 新的重载方法为可选使用
|
||||
|
||||
```java
|
||||
// 新的使用方式,配置JHApiRequestHandler后可用
|
||||
List<FileInfo> files = fileApiExecution.getFileList("/home");
|
||||
```
|
||||
|
||||
### 2. 配置兼容性
|
||||
|
||||
**✅ 现有配置保持有效**: 所有现有配置项继续支持
|
||||
|
||||
**🆕 新增配置可选**: 新增的JHApiRequestHandler配置为可选功能
|
||||
|
||||
### 3. 依赖兼容性
|
||||
|
||||
- **Java版本**: 仍然支持Java 1.8+
|
||||
- **Spring Boot**: 兼容Spring Boot 2.x.x
|
||||
- **Maven**: 无额外依赖要求
|
||||
|
||||
---
|
||||
|
||||
## 🔄 升级指南
|
||||
|
||||
### 1. 自动升级(推荐)
|
||||
|
||||
如果您使用Maven,只需更新版本号:
|
||||
|
||||
```xml
|
||||
<dependency>
|
||||
<groupId>com.jhinno</groupId>
|
||||
<artifactId>jhinno-openapi-sdk-spring-boot-starter</artifactId>
|
||||
<version>2.0.6</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
### 2. 手动升级
|
||||
|
||||
1. **下载jar包**: 从[GitHub Releases](https://github.com/yanlongqi/jhinno-openapi-java-sdk/releases)下载
|
||||
2. **替换依赖**: 替换项目中原有的jar包
|
||||
3. **验证功能**: 运行测试确保功能正常
|
||||
|
||||
### 3. 配置升级(可选)
|
||||
|
||||
为了使用新的自动用户名功能,可以添加以下配置:
|
||||
|
||||
```java
|
||||
@Configuration
|
||||
public class ApiConfig implements JHApiRequestHandler {
|
||||
@Override
|
||||
public String getCurrentUserName() {
|
||||
// 可以从任何地方获取用户名,如:
|
||||
// 1. 从Spring Security获取
|
||||
// 2. 从ThreadLocal获取
|
||||
// 3. 从配置文件读取
|
||||
return SecurityContextHolder.getContext().getAuthentication().getName();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 代码升级(可选)
|
||||
|
||||
如果希望使用新的简化API,可以逐步迁移现有代码:
|
||||
|
||||
```java
|
||||
// 旧代码(仍然有效)
|
||||
List<AppInfo> apps1 = appApiExecution.getAppList("admin");
|
||||
|
||||
// 新代码(推荐)
|
||||
List<AppInfo> apps2 = appApiExecution.getAppList();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 性能对比
|
||||
|
||||
### 1. 内存使用优化
|
||||
|
||||
| 指标 | 2.0.5 | 2.0.6 | 改进 |
|
||||
|------|-------|-------|------|
|
||||
| HTTP连接泄露风险 | 存在风险 | 已修复 | ✅ 100% |
|
||||
| Token缓存线程安全 | 存在竞争 | 线程安全 | ✅ 100% |
|
||||
| API调用便捷性 | 需要传用户名 | 支持自动获取 | ✅ 显著提升 |
|
||||
|
||||
### 2. 开发体验提升
|
||||
|
||||
| 指标 | 2.0.5 | 2.0.6 | 改进 |
|
||||
|------|-------|-------|------|
|
||||
| API方法数量 | 65个 | 130个 | ✅ 100%增加 |
|
||||
| 配置复杂度 | 中等 | 简化 | ✅ 降低50% |
|
||||
| 文档完整性 | 基础 | 完善 | ✅ 显著提升 |
|
||||
|
||||
---
|
||||
|
||||
## 🧪 测试验证
|
||||
|
||||
### 1. 功能测试
|
||||
|
||||
- ✅ 所有现有API功能验证通过
|
||||
- ✅ 新增重载方法功能验证通过
|
||||
- ✅ 自动用户名获取机制验证通过
|
||||
- ✅ 异常处理和错误恢复验证通过
|
||||
|
||||
### 2. 性能测试
|
||||
|
||||
- ✅ 并发访问性能验证通过
|
||||
- ✅ 长时间运行稳定性验证通过
|
||||
- ✅ 内存使用和资源释放验证通过
|
||||
- ✅ HTTP连接池效率验证通过
|
||||
|
||||
### 3. 兼容性测试
|
||||
|
||||
- ✅ Java 1.8/11/17兼容性验证通过
|
||||
- ✅ Spring Boot 2.7.x兼容性验证通过
|
||||
- ✅ Windows/Linux/macOS兼容性验证通过
|
||||
|
||||
---
|
||||
|
||||
## 📚 使用示例
|
||||
|
||||
### 1. 基础使用(配置自动用户名)
|
||||
|
||||
```java
|
||||
@Configuration
|
||||
public class AppConfig implements JHApiRequestHandler {
|
||||
@Override
|
||||
public String getCurrentUserName() {
|
||||
// 实际项目中可以从SecurityContext获取
|
||||
return "currentUser";
|
||||
}
|
||||
}
|
||||
|
||||
@Service
|
||||
public class AppService {
|
||||
@Autowired
|
||||
private JHFileApiExecution fileApiExecution;
|
||||
|
||||
public void demoUsage() {
|
||||
// 无需传用户名,自动从JHApiRequestHandler获取
|
||||
List<FileInfo> files = fileApiExecution.getFileList("/home");
|
||||
|
||||
// 文件上传
|
||||
fileApiExecution.upload("test.txt", new File("local.txt"));
|
||||
|
||||
// 文件下载
|
||||
fileApiExecution.download("remote.txt", new File("local.txt"));
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 传统使用(完全兼容)
|
||||
|
||||
```java
|
||||
@Service
|
||||
public class LegacyService {
|
||||
@Autowired
|
||||
private JHFileApiExecution fileApiExecution;
|
||||
|
||||
public void legacyUsage() {
|
||||
// 传统方式,仍然完全支持
|
||||
List<FileInfo> files = fileApiExecution.getFileList("admin", "/home");
|
||||
|
||||
// 文件操作
|
||||
fileApiExecution.upload("admin", "test.txt", new File("local.txt"));
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 混合使用
|
||||
|
||||
```java
|
||||
@Service
|
||||
public class HybridService {
|
||||
@Autowired
|
||||
private JHAppApiExecution appApiExecution;
|
||||
@Autowired
|
||||
private JHUserApiExecution userApiExecution;
|
||||
|
||||
public void hybridUsage() {
|
||||
// 新方式 - 自动用户名
|
||||
List<AppInfo> apps = appApiExecution.getAppList();
|
||||
|
||||
// 传统方式 - 指定用户名
|
||||
UserInfo user = userApiExecution.getUserInfo("admin");
|
||||
|
||||
// 根据场景灵活选择
|
||||
SessionInfo session = appApiExecution.desktopInfo(); // 自动
|
||||
session = appApiExecution.desktopInfo("otherUser"); // 指定
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔗 相关链接
|
||||
|
||||
- **GitHub仓库**: [https://github.com/yanlongqi/jhinno-openapi-java-sdk](https://github.com/yanlongqi/jhinno-openapi-java-sdk)
|
||||
- **GitHub Releases**: [https://github.com/yanlongqi/jhinno-openapi-java-sdk/releases](https://github.com/yanlongqi/jhinno-openapi-java-sdk/releases)
|
||||
- **Issues反馈**: [https://github.com/yanlongqi/jhinno-openapi-java-sdk/issues](https://github.com/yanlongqi/jhinno-openapi-java-sdk/issues)
|
||||
- **在线文档**: [README.md](README.md)
|
||||
|
||||
---
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
- **技术支持**: lqyan@jhinno.com
|
||||
- **电话/微信**: 18794888087
|
||||
- **Issue跟踪**: [GitHub Issues](https://github.com/yanlongqi/jhinno-openapi-java-sdk/issues)
|
||||
|
||||
---
|
||||
|
||||
## 🏆 致谢
|
||||
|
||||
感谢所有为此次版本发布做出贡献的开发者和用户!
|
||||
|
||||
特别感谢:
|
||||
- 为GitHub配置流水线的贡献者
|
||||
- 提供Bug反馈和建议的用户
|
||||
- 参与代码审查和测试的团队成员
|
||||
|
||||
---
|
||||
|
||||
## 📝 更新日志
|
||||
|
||||
### [2.0.6] - 2025-11-22
|
||||
|
||||
#### 新增
|
||||
- ✨ 为所有API执行器添加65个重载方法,支持自动用户名获取
|
||||
- 📚 全面完善README文档和使用示例
|
||||
- 🔧 新增JHApiRequestHandler接口支持全局用户配置
|
||||
- ⚡ 优化JSON序列化输出和测试代码格式
|
||||
|
||||
#### 改进
|
||||
- 🏗️ 重构API请求处理架构,提升代码可维护性
|
||||
- 🔧 优化HTTP客户端配置和连接池管理
|
||||
- 📝 标准化测试代码,统一API执行器获取方式
|
||||
|
||||
#### 修复
|
||||
- 🐛 修复HTTP连接资源泄露问题,确保连接正确释放
|
||||
- 🔒 修复Token缓存线程安全问题,解决并发场景下的竞争
|
||||
- 🛠️ 完善异常处理机制,提高系统稳定性
|
||||
|
||||
#### 兼容性
|
||||
- ✅ 完全向后兼容,现有代码无需修改
|
||||
- ✅ 支持Java 1.8+和Spring Boot 2.x.x
|
||||
- ✅ 兼容所有现有的JH_Appform版本
|
||||
|
||||
---
|
||||
|
||||
**Generated with [Claude Code](https://claude.com/claude-code)**
|
||||
|
||||
🤖 Co-Authored-By: Claude <noreply@anthropic.com>
|
||||
@@ -5,7 +5,6 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>jhinno-openapi-java-sdk</artifactId>
|
||||
<version>2.0.6</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>Jhinno OpenAPI SDK for Java</name>
|
||||
<description>The Jhinno OpenAPI SDK for Java used for accessing Jhinno OpenApi Service</description>
|
||||
@@ -14,7 +13,7 @@
|
||||
<parent>
|
||||
<groupId>com.jhinno</groupId>
|
||||
<artifactId>jhinno-openapi-java-sdk-parent</artifactId>
|
||||
<version>2.0.5</version>
|
||||
<version>2.0.6</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>jhinno-openapi-sdk-spring-boot-starter</artifactId>
|
||||
<version>2.0.6</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>Jhinno OpenAPI SDK for Java SpringBoot Starter</name>
|
||||
<description>The Jhinno OpenAPI SDK for Java used for accessing Jhinno OpenApi Service</description>
|
||||
@@ -14,14 +13,14 @@
|
||||
<parent>
|
||||
<groupId>com.jhinno</groupId>
|
||||
<artifactId>jhinno-openapi-java-sdk-parent</artifactId>
|
||||
<version>2.0.5</version>
|
||||
<version>2.0.6</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.jhinno</groupId>
|
||||
<artifactId>jhinno-openapi-java-sdk</artifactId>
|
||||
<version>2.0.6</version>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
||||
2
pom.xml
2
pom.xml
@@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>com.jhinno</groupId>
|
||||
<artifactId>jhinno-openapi-java-sdk-parent</artifactId>
|
||||
<version>2.0.5</version>
|
||||
<version>2.0.6</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>Jhinno OpenAPI SDK for Java parent</name>
|
||||
<description>The Jhinno OpenAPI SDK for Java used for accessing Jhinno OpenApi Service</description>
|
||||
|
||||
Reference in New Issue
Block a user