浏览代码

修复表结构获取错误

zhouhao 7 年之前
父节点
当前提交
8e848b6aa3

+ 10 - 5
hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/AbstractSqlTableMetaDataParser.java

@@ -1,10 +1,12 @@
 package org.hswebframework.web.database.manager.meta.table.parser;
 
+import lombok.SneakyThrows;
 import org.apache.commons.beanutils.BeanUtilsBean;
 import org.hswebframework.ezorm.core.ObjectWrapper;
 import org.hswebframework.ezorm.rdb.executor.SqlExecutor;
 import org.hswebframework.web.database.manager.meta.table.ColumnMetadata;
 import org.hswebframework.web.database.manager.meta.table.TableMetadata;
+import org.hswebframework.web.datasource.DataSourceHolder;
 import org.hswebframework.web.datasource.DatabaseType;
 
 import java.sql.SQLException;
@@ -24,12 +26,12 @@ public abstract class AbstractSqlTableMetaDataParser implements TableMetaDataPar
 
     public abstract String getSelectAllTableSql();
 
-    public AbstractSqlTableMetaDataParser(SqlExecutor sqlExecutor,DatabaseType... databaseTypes) {
+    public AbstractSqlTableMetaDataParser(SqlExecutor sqlExecutor, DatabaseType... databaseTypes) {
         this.sqlExecutor = sqlExecutor;
         supportDataBases.addAll(Arrays.asList(databaseTypes));
     }
 
-    private Set<DatabaseType> supportDataBases =new HashSet<>();
+    private Set<DatabaseType> supportDataBases = new HashSet<>();
 
     @Override
     public boolean isSupport(DatabaseType type) {
@@ -43,15 +45,17 @@ public abstract class AbstractSqlTableMetaDataParser implements TableMetaDataPar
 
     @Override
     public List<TableMetadata> parseAll() throws SQLException {
+        String dsId = DataSourceHolder.switcher().currentDataSourceId();
         return sqlExecutor.list(getSelectAllTableSql())
                 .parallelStream()
                 .map(map -> map.get("name"))
                 .map(String::valueOf)
                 .map(tableName -> {
                     try {
+                        DataSourceHolder.switcher().use(dsId);
                         return this.parse(tableName);
-                    } catch (SQLException e) {
-                        throw new RuntimeException(e);
+                    } finally {
+                        DataSourceHolder.switcher().reset();
                     }
                 })
                 .filter(Objects::nonNull)
@@ -59,7 +63,8 @@ public abstract class AbstractSqlTableMetaDataParser implements TableMetaDataPar
     }
 
     @Override
-    public TableMetadata parse(String objectName) throws SQLException {
+    @SneakyThrows
+    public TableMetadata parse(String objectName) {
 
         Map<String, Object> param = new HashMap<>();
         param.put("table", objectName);