test
This commit is contained in:
156
ImportService硬编码路径分析报告.md
Normal file
156
ImportService硬编码路径分析报告.md
Normal file
@@ -0,0 +1,156 @@
|
||||
# ImportService.java 硬编码路径深度分析报告
|
||||
|
||||
## 概述
|
||||
对 `src/main/java/com/point/strategy/datas/service/ImportService.java` 中的 `hookUp` 系列方法进行深度分析,发现多处硬编码路径问题。
|
||||
|
||||
## 发现的硬编码路径问题
|
||||
|
||||
### 1. hookUpNet 方法 (行1611)
|
||||
**问题位置**: `ImportService.java:1611-1640`
|
||||
**硬编码路径**:
|
||||
```java
|
||||
if(system.equals("win")){
|
||||
filePath = "D:\\fileAll\\"; // 硬编码Windows路径
|
||||
targetPath = "D:\\testFile"; // 硬编码Windows路径
|
||||
FileUtil2.makedir(filePath);
|
||||
}else {
|
||||
filePath = "/home/fileAll/"; // 硬编码Linux路径
|
||||
targetPath = "/home/testFile"; // 硬编码Linux路径
|
||||
FileUtil2.makedir(filePath);
|
||||
}
|
||||
```
|
||||
|
||||
**影响**: 该方法用于处理网络文件上传,如果部署在不同环境会导致路径不存在错误。
|
||||
|
||||
### 2. hookUpTwoNet 方法 (行1650)
|
||||
**问题位置**: `ImportService.java:1650-1679`
|
||||
**硬编码路径**:
|
||||
```java
|
||||
if(system.equals("win")){
|
||||
filePath = "D:\\fileAllTwo\\"; // 硬编码Windows路径
|
||||
targetPath = "D:\\testFileTwo"; // 硬编码Windows路径
|
||||
FileUtil2.makedir(filePath);
|
||||
}else {
|
||||
filePath = "/home/fileAllTwo/"; // 硬编码Linux路径
|
||||
targetPath = "/home/testFileTwo"; // 硬编码Linux路径
|
||||
FileUtil2.makedir(filePath);
|
||||
}
|
||||
```
|
||||
|
||||
**影响**: 这是用户特别关注的方法,用于双网络文件上传,存在相同的路径硬编码问题。
|
||||
|
||||
### 3. hookUpJztNet 方法 (行2742)
|
||||
**问题位置**: `ImportService.java:2742-2770`
|
||||
**硬编码路径**:
|
||||
```java
|
||||
if(system.equals("win")){
|
||||
filePath = "D:\\fileAll\\"; // 硬编码Windows路径
|
||||
targetPath = "D:\\testFile"; // 硬编码Windows路径
|
||||
FileUtil2.makedir(filePath);
|
||||
}else {
|
||||
filePath = "/opt/fileAll/"; // 硬编码Linux路径 (注意这里是/opt而不是/home)
|
||||
targetPath = "/opt/testFile"; // 硬编码Linux路径
|
||||
FileUtil2.makedir(filePath);
|
||||
}
|
||||
```
|
||||
|
||||
**影响**: 该方法用于极态通文件上传,Linux路径使用了 `/opt` 而其他方法使用 `/home`,存在不一致性。
|
||||
|
||||
### 4. hookUpXiaoGan 方法 (行2780)
|
||||
**问题位置**: `ImportService.java:2780+`
|
||||
**硬编码表名**:
|
||||
```java
|
||||
String tableName = "wsdajh_table_20220402164528"; // 硬编码表名
|
||||
```
|
||||
|
||||
**影响**: 该方法用于孝感特定业务逻辑,表名硬编码导致无法适应不同环境的数据库配置。
|
||||
|
||||
## 其他相关方法分析
|
||||
|
||||
### 5. hookUp 方法 (行891)
|
||||
**问题位置**: `ImportService.java:891-990`
|
||||
**路径使用**: 该方法使用配置化路径,相对较好:
|
||||
```java
|
||||
String saveUrl = uploadPath + File.separator + "uploadFile" + File.separator ;
|
||||
```
|
||||
|
||||
### 6. hookUpTwoZip 方法 (行2003)
|
||||
**问题位置**: `ImportService.java:2003-2100`
|
||||
**路径使用**: 该方法也使用配置化路径:
|
||||
```java
|
||||
String saveUrl = uploadPath + File.separator + "uploadFile" + File.separator ;
|
||||
```
|
||||
|
||||
## 硬编码路径的问题分析
|
||||
|
||||
### 1. 环境依赖性问题
|
||||
- **Windows路径**: `D:\fileAll\`、`D:\testFile` 等路径在Linux环境下不存在
|
||||
- **Linux路径**: `/home/fileAll/` 在某些Linux发行版可能没有相应权限
|
||||
- **路径不一致**: 不同方法使用不同的Linux路径前缀 (`/home/` vs `/opt/`)
|
||||
|
||||
### 2. 部署风险
|
||||
- 在Docker容器中运行时,这些路径可能不存在
|
||||
- 在云服务器环境中,权限配置可能不同
|
||||
- 跨平台部署时会失败
|
||||
|
||||
### 3. 维护性问题
|
||||
- 路径变更需要修改代码
|
||||
- 不同环境需要不同的代码版本
|
||||
- 不符合12-Factor App原则
|
||||
|
||||
## 建议的解决方案
|
||||
|
||||
### 1. 配置化路径
|
||||
在 `application.yml` 中添加配置:
|
||||
```yaml
|
||||
file:
|
||||
upload:
|
||||
temp:
|
||||
win: "D:\\fileAll\\"
|
||||
linux: "/home/fileAll/"
|
||||
processing:
|
||||
win: "D:\\testFile"
|
||||
linux: "/home/testFile"
|
||||
```
|
||||
|
||||
### 2. 环境变量支持
|
||||
使用系统环境变量:
|
||||
```java
|
||||
String filePath = System.getenv("ARCHIVE_FILE_PATH") != null ?
|
||||
System.getenv("ARCHIVE_FILE_PATH") : "/default/path";
|
||||
```
|
||||
|
||||
### 3. 动态路径生成
|
||||
基于应用根目录动态生成:
|
||||
```java
|
||||
String basePath = System.getProperty("user.home") + File.separator + "archive";
|
||||
String filePath = basePath + File.separator + "fileAll" + File.separator;
|
||||
```
|
||||
|
||||
### 4. 统一路径管理
|
||||
创建一个专门的路径管理类:
|
||||
```java
|
||||
@Component
|
||||
public class PathManager {
|
||||
@Value("${archive.temp.path:./temp}")
|
||||
private String tempPath;
|
||||
|
||||
@Value("${archive.upload.path:./uploads}")
|
||||
private String uploadPath;
|
||||
|
||||
public String getTempFilePath() {
|
||||
return tempPath + File.separator + "fileAll" + File.separator;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 修复优先级
|
||||
|
||||
1. **高优先级**: `hookUpTwoNet` 方法 - 用户特别关注的功能
|
||||
2. **高优先级**: `hookUpJztNet` 方法 - 存在路径不一致问题
|
||||
3. **中优先级**: `hookUpNet` 方法 - 常规网络上传功能
|
||||
4. **低优先级**: `hookUpXiaoGan` 方法 - 特定业务功能
|
||||
|
||||
## 总结
|
||||
|
||||
`ImportService.java` 中的 `hookUp` 系列方法存在多处硬编码路径问题,主要集中在网络文件上传相关的方法中。这些硬编码路径会导致跨平台部署失败、环境依赖性强、维护困难等问题。建议尽快进行配置化改造,使用环境变量或配置文件来管理路径,提高系统的可移植性和可维护性。
|
||||
Reference in New Issue
Block a user