diff --git a/pom.xml b/pom.xml
index 878bfa5..b5394f4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -280,4 +280,18 @@
+
+
+ jdk17-home-env
+
+
+ env.JDK17_HOME
+
+
+
+ ${env.JDK17_HOME}
+
+
+
+
diff --git a/src/main/java/com/example/workutils/system/config/DatasourceConfigManager.java b/src/main/java/com/example/workutils/system/config/DatasourceConfigManager.java
index 56c5730..186f27f 100644
--- a/src/main/java/com/example/workutils/system/config/DatasourceConfigManager.java
+++ b/src/main/java/com/example/workutils/system/config/DatasourceConfigManager.java
@@ -5,17 +5,15 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
-import java.io.*;
+import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
/**
- * 多数据源配置管理器
- *
- * 从 data/datasources.json 加载数据源列表,供 MyBatis 逆向工程插件选择使用。
- * 配置文件的路径和首次复制由 WorkUtilsProperties 统一管理。
+ * Loads datasource definitions from data/datasources.json.
*/
@Slf4j
@Component
@@ -30,31 +28,36 @@ public class DatasourceConfigManager {
@PostConstruct
void init() {
- // data/ 目录下的文件已由 WorkUtilsProperties 统一确保存在
reload();
}
- /** 重新加载数据源配置 */
public synchronized void reload() {
datasources.clear();
Path configFile = getConfigFile();
if (!Files.exists(configFile)) {
- log.warn("数据源配置文件不存在: {}", configFile.toAbsolutePath());
+ log.warn("Datasource config file does not exist: {}", configFile.toAbsolutePath());
return;
}
+
try {
String json = new String(Files.readAllBytes(configFile), StandardCharsets.UTF_8);
List loaded = JSON.parseArray(json, DatasourceConfig.class);
if (loaded != null) {
- datasources.addAll(loaded);
+ for (DatasourceConfig datasource : loaded) {
+ if (datasource != null && datasource.getName() != null
+ && !datasource.getName().trim().isEmpty()) {
+ datasources.add(datasource);
+ }
+ }
}
- log.info("已加载 {} 套数据源配置", datasources.size());
+ log.info("Loaded {} datasource configs", datasources.size());
} catch (IOException e) {
- log.error("解析数据源配置失败: {}", e.getMessage());
+ log.error("Failed to read datasource config: {}", e.getMessage());
+ } catch (RuntimeException e) {
+ log.error("Failed to parse datasource config: {}", e.getMessage());
}
}
- /** 获取所有数据源名称列表 */
public List getDatasourceNames() {
List names = new ArrayList<>();
for (DatasourceConfig ds : datasources) {
@@ -63,14 +66,18 @@ public class DatasourceConfigManager {
return names;
}
- /** 根据名称查找数据源配置 */
public DatasourceConfig findByName(String name) {
- return datasources.stream()
- .filter(ds -> ds.getName().equals(name))
- .findFirst().orElse(null);
+ if (name == null) {
+ return null;
+ }
+ for (DatasourceConfig ds : datasources) {
+ if (name.equals(ds.getName())) {
+ return ds;
+ }
+ }
+ return null;
}
- /** 获取配置文件的路径(供设置窗口打开编辑) */
public Path getConfigFile() {
return properties.getDatasourcesFilePath();
}
diff --git a/src/main/java/com/example/workutils/system/support/OutputHelper.java b/src/main/java/com/example/workutils/system/support/OutputHelper.java
index 681666c..c6fd54c 100644
--- a/src/main/java/com/example/workutils/system/support/OutputHelper.java
+++ b/src/main/java/com/example/workutils/system/support/OutputHelper.java
@@ -9,10 +9,14 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import java.io.FileWriter;
import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
import java.util.Collections;
import java.util.List;
@@ -41,7 +45,8 @@ public class OutputHelper {
}
fileOperationHelper.ensureDirectoryExists(filePath.getParent());
- try (CSVWriter writer = new CSVWriter(new FileWriter(filePath.toFile()))) {
+ try (Writer fileWriter = Files.newBufferedWriter(filePath, StandardCharsets.UTF_8);
+ CSVWriter writer = new CSVWriter(fileWriter)) {
if (headers.length > 0) {
writer.writeNext(headers);
}
@@ -67,7 +72,10 @@ public class OutputHelper {
boolean fileExists = fileOperationHelper.fileExists(filePath);
boolean shouldWriteHeaders = !fileExists && headers.length > 0;
- try (CSVWriter writer = new CSVWriter(new FileWriter(filePath.toFile(), true))) {
+ try (Writer fileWriter = new OutputStreamWriter(
+ Files.newOutputStream(filePath, StandardOpenOption.CREATE, StandardOpenOption.APPEND),
+ StandardCharsets.UTF_8);
+ CSVWriter writer = new CSVWriter(fileWriter)) {
if (shouldWriteHeaders) {
writer.writeNext(headers);
}