From 2e47c66fdac42e5a0b105edbb8c7d0c3bc64565b Mon Sep 17 00:00:00 2001 From: chenbowen Date: Fri, 30 Jan 2026 16:02:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=94=A8=E6=88=B7=E4=B8=8B?= =?UTF-8?q?=E5=85=B6=E4=BB=96=20schema=20=E5=8C=85=E5=90=AB=E5=90=8C?= =?UTF-8?q?=E5=90=8D=20flowable=20=E8=A1=A8=E6=97=A0=E6=B3=95=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=20bpm=20=E6=9C=8D=E5=8A=A1=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/impl/db/DbSqlSessionFactory.java | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/zt-module-bpm/zt-module-bpm-server/src/main/java/org/flowable/common/engine/impl/db/DbSqlSessionFactory.java b/zt-module-bpm/zt-module-bpm-server/src/main/java/org/flowable/common/engine/impl/db/DbSqlSessionFactory.java index ed2f0c94..cbea9553 100644 --- a/zt-module-bpm/zt-module-bpm-server/src/main/java/org/flowable/common/engine/impl/db/DbSqlSessionFactory.java +++ b/zt-module-bpm/zt-module-bpm-server/src/main/java/org/flowable/common/engine/impl/db/DbSqlSessionFactory.java @@ -77,7 +77,12 @@ public class DbSqlSessionFactory implements SessionFactory { // 当前系统适配 dm,如果存在 schema 为空的情况,从 connection 获取 try { if (getDatabaseSchema() == null || getDatabaseSchema().length() == 0){ - setDatabaseSchema(dbSqlSession.getSqlSession().getConnection().getSchema()); + String schemaFromUrl = extractSchemaFromJdbcUrl(dbSqlSession.getSqlSession().getConnection()); + if (schemaFromUrl != null && schemaFromUrl.length() > 0) { + setDatabaseSchema(schemaFromUrl); + } else { + setDatabaseSchema(dbSqlSession.getSqlSession().getConnection().getSchema()); + } } dbSqlSession.getSqlSession().getConnection().getSchema(); } catch (SQLException e) { @@ -351,4 +356,39 @@ public class DbSqlSessionFactory implements SessionFactory { public void setUsePrefixId(boolean usePrefixId) { this.usePrefixId = usePrefixId; } + + private String extractSchemaFromJdbcUrl(java.sql.Connection connection) { + if (connection == null) { + return null; + } + try { + String url = connection.getMetaData().getURL(); + if (url == null || url.isEmpty()) { + return null; + } + int queryIndex = url.indexOf('?'); + if (queryIndex < 0 || queryIndex == url.length() - 1) { + return null; + } + String query = url.substring(queryIndex + 1); + String[] parts = query.split("[&;]"); + for (String part : parts) { + int eqIndex = part.indexOf('='); + if (eqIndex <= 0 || eqIndex == part.length() - 1) { + continue; + } + String key = part.substring(0, eqIndex).trim().toLowerCase(Locale.ROOT); + if ("schema".equals(key) || "currentschema".equals(key) || "current_schema".equals(key)) { + String value = part.substring(eqIndex + 1).trim(); + if ((value.startsWith("\"") && value.endsWith("\"")) || (value.startsWith("'") && value.endsWith("'"))) { + value = value.substring(1, value.length() - 1); + } + return value; + } + } + } catch (SQLException ignored) { + return null; + } + return null; + } }