From a0933afc97679211b04b1e6ed411ec9e1a86024f Mon Sep 17 00:00:00 2001 From: aipper Date: Tue, 18 Nov 2025 18:19:37 +0800 Subject: [PATCH] test --- operations-log.md | 24 ++ .../point/strategy/table/OperatorTable.java | 97 +++++-- src/main/resources/logback-spring.xml | 267 +++++++++--------- 3 files changed, 228 insertions(+), 160 deletions(-) diff --git a/operations-log.md b/operations-log.md index 166d53a..13e99a5 100644 --- a/operations-log.md +++ b/operations-log.md @@ -15,3 +15,27 @@ - 目的:解决部署时报“镜像找不到”的问题,提升一键部署体验。 - 工具:apply_patch(补丁写入) - 结果:补丁应用成功,可通过 `./archive-manager.sh deploy <目录>` 直接部署,首次会自动构建镜像。 + +- 时间:2025-11-18 17:43(UTC+8) +- 动作:按环境调整日志输出配置 +- 位置:src/main/resources/logback-spring.xml +- 变更:新增 springProfile 分支,开发环境仅输出控制台,生产环境写入与 Dockerfile 一致的 `/app/logs` 并保留分级 RollingFileAppender。 +- 目的:满足开发环境不落盘、生产环境落盘且目录对齐容器目录的需求。 +- 工具:apply_patch(重写配置文件) +- 结果:配置已更新,可通过启动 dev/prod Profile 验证控制台与落盘行为。 + +- 时间:2025-11-18 17:46(UTC+8) +- 动作:修复 logback 配置解析错误 +- 位置:src/main/resources/logback-spring.xml +- 变更:将 springProfile 条件中的逻辑与符号转义为 `&`,解决 XML 解析报错(“实体名称必须紧跟在 & 后面”)。 +- 目的:确保 logback-spring.xml 能被 Spring Boot 正常加载。 +- 工具:apply_patch(补丁写入) +- 结果:配置已更正,可再次启动验证。 + +- 时间:2025-11-18 18:00(UTC+8) +- 动作:调整 OperatorTable 读取数据源方式 +- 位置:src/main/java/com/point/strategy/table/OperatorTable.java +- 变更:不再从固定 application.properties 读取数据源,改为注入 Spring Environment,通过激活的 profile 动态获取 `spring.datasource.*`,并在未配置时抛出明确异常;保持现有静态方法接口,内部连接创建随当前 yml 生效。 +- 目的:保证建表 DDL 能使用当前激活配置的数据库连接,解决 dev/prod yml 下无法建表的问题。 +- 工具:apply_patch(补丁写入) +- 结果:已更新,可在激活对应 profile 后尝试新增门类触发表创建。 diff --git a/src/main/java/com/point/strategy/table/OperatorTable.java b/src/main/java/com/point/strategy/table/OperatorTable.java index 9965da8..ac777ce 100644 --- a/src/main/java/com/point/strategy/table/OperatorTable.java +++ b/src/main/java/com/point/strategy/table/OperatorTable.java @@ -1,10 +1,16 @@ package com.point.strategy.table; import com.point.strategy.bean.TentityStructDescription; -import com.point.strategy.common.SystemProperty; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; -import java.sql.*; +import javax.annotation.PostConstruct; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; import java.util.ArrayList; import java.util.List; @@ -14,30 +20,67 @@ import java.util.List; @Service public class OperatorTable { + private static Environment env; + private static String url; private static Connection conn = null; private static Statement st = null; - private static String driver_dm = SystemProperty.getKeyValue("spring.datasource.driverClassName", "application.properties"); - private static String driver_mysql = SystemProperty.getKeyValue("spring.datasource.driverClassName", "application.properties"); - private static String driver_kingbase = SystemProperty.getKeyValue("spring.datasource.driverClassName", "application.properties"); + @Autowired + public void setEnv(Environment environment) { + OperatorTable.env = environment; + } - private static String url = SystemProperty.getKeyValue("spring.datasource.url", "application.properties"); + @PostConstruct + public void initEnv() { + // 触发一次读取,确保在 Spring 环境内完成静态字段赋值 + getUrl(); + } - private static String user = SystemProperty.getKeyValue("spring.datasource.username", "application.properties"); + private static String getDriver() { + validateEnv(); + return env.getProperty("spring.datasource.driverClassName"); + } - private static String password = SystemProperty.getKeyValue("spring.datasource.password", "application.properties"); + private static String getUrl() { + validateEnv(); + url = env.getProperty("spring.datasource.url"); + if (url == null || url.trim().isEmpty()) { + throw new IllegalStateException("未找到 spring.datasource.url,请确认激活的 yml 中已配置数据源"); + } + return url; + } + + private static String getUser() { + validateEnv(); + return env.getProperty("spring.datasource.username"); + } + + private static String getPassword() { + validateEnv(); + return env.getProperty("spring.datasource.password"); + } + + private static void validateEnv() { + if (env == null) { + throw new IllegalStateException("未获取到 Spring 环境,无法读取激活配置的数据源信息"); + } + } //获取表字段 public static Boolean getTableField(String tableName,String field) throws Exception { try { Boolean flag = true; + String url = getUrl(); + String driver = getDriver(); + String user = getUser(); + String password = getPassword(); if (url.contains("dm")){ - Class.forName(driver_dm); + Class.forName(driver); }else if(url.contains("mysql")){ - Class.forName(driver_mysql); + Class.forName(driver); } else if (url.contains("kingbase8")||url.contains("highgo")) { - Class.forName(driver_kingbase); + Class.forName(driver); } conn = DriverManager.getConnection(url, user, password); //获得元数据 @@ -69,12 +112,16 @@ public class OperatorTable { //添加字段 public static void addField(String sqlDDL) throws Exception { try { + String url = getUrl(); + String driver = getDriver(); + String user = getUser(); + String password = getPassword(); if (url.contains("dm")){ - Class.forName(driver_dm); + Class.forName(driver); }else if(url.contains("mysql")){ - Class.forName(driver_mysql); + Class.forName(driver); } else if (url.contains("kingbase8")||url.contains("highgo")) { - Class.forName(driver_kingbase); + Class.forName(driver); } conn = DriverManager.getConnection(url, user, password); st = conn.createStatement(); @@ -93,12 +140,16 @@ public class OperatorTable { public static void createTable(String sqlDDL) throws Exception { try { + String url = getUrl(); + String driver = getDriver(); + String user = getUser(); + String password = getPassword(); if (url.contains("dm")){ - Class.forName(driver_dm); + Class.forName(driver); }else if(url.contains("mysql")){ - Class.forName(driver_mysql); + Class.forName(driver); }else if (url.contains("kingbase8")||url.contains("highgo")) { - Class.forName(driver_kingbase); + Class.forName(driver); } conn = DriverManager.getConnection(url, user, password); st = conn.createStatement(); @@ -118,12 +169,16 @@ public class OperatorTable { public static void deleteTable(String sqlDDL) throws Exception { try { + String url = getUrl(); + String driver = getDriver(); + String user = getUser(); + String password = getPassword(); if (url.contains("dm")){ - Class.forName(driver_dm); + Class.forName(driver); }else if(url.contains("mysql")){ - Class.forName(driver_mysql); + Class.forName(driver); }else if (url.contains("kingbase8")||url.contains("highgo")) { - Class.forName(driver_kingbase); + Class.forName(driver); } conn = DriverManager.getConnection(url, user, password); st = conn.createStatement(); @@ -2150,4 +2205,4 @@ public class OperatorTable { System.out.println(start); System.out.println(end); } -} \ No newline at end of file +} diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index b37723c..5d6aa82 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -13,10 +13,6 @@ - - - - @@ -35,146 +31,139 @@ - - - - - ${log.path}/web_debug.log - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n - UTF-8 - - - - - ${log.path}/web-debug-%d{yyyy-MM-dd}.%i.log - - 100MB - - - 15 - - - - debug - ACCEPT - DENY - - + + + + - - - - ${log.path}/web_info.log - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n - UTF-8 - - - - - ${log.path}/web-info-%d{yyyy-MM-dd}.%i.log - - 100MB - - - 15 - - - - info - ACCEPT - DENY - - + + + + + ${log.path}/web_debug.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + ${log.path}/web-debug-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + + + + debug + ACCEPT + DENY + + - - - - ${log.path}/web_warn.log - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n - UTF-8 - - - - ${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log - - 100MB - - - 15 - - - - warn - ACCEPT - DENY - - + + + + ${log.path}/web_info.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + ${log.path}/web-info-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + + + + info + ACCEPT + DENY + + - - - - ${log.path}/web_error.log - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n - UTF-8 - - - - ${log.path}/web-error-%d{yyyy-MM-dd}.%i.log - - 100MB - - - 15 - - - - ERROR - ACCEPT - DENY - - + + + + ${log.path}/web_warn.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + ${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + + + + warn + ACCEPT + DENY + + - + + + ${log.path}/web_error.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + ${log.path}/web-error-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + + + + ERROR + ACCEPT + DENY + + - - - --> + + + + + + + + - + + + + + - 【logging.level.org.mybatis=debug logging.level.dao=debug】 - --> + + + + + + - - - - - - - - - - - - \ No newline at end of file +