From 9215896cead5f2d8ef53a25ed418ea1079a1ea13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=AE=B6=E8=AE=AD?= Date: Wed, 24 Jun 2026 19:14:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=81=A5=E5=A3=AE=E6=80=A7=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 14 ++++++ .../config/DatasourceConfigManager.java | 43 +++++++++++-------- .../system/support/OutputHelper.java | 14 ++++-- 3 files changed, 50 insertions(+), 21 deletions(-) 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); }