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
+