|
@ -12,12 +12,15 @@ import org.springframework.util.StringUtils; |
|
|
|
|
|
|
|
|
import javax.sql.DataSource; |
|
|
import javax.sql.DataSource; |
|
|
import java.util.Collections; |
|
|
import java.util.Collections; |
|
|
|
|
|
import java.util.HashMap; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
@Service("io.sc.platform.jdbc.service.impl.JdbcMetaDataLoaderServiceImpl") |
|
|
@Service("io.sc.platform.jdbc.service.impl.JdbcMetaDataLoaderServiceImpl") |
|
|
public class JdbcMetaDataLoaderServiceImpl implements JdbcMetaDataLoaderService { |
|
|
public class JdbcMetaDataLoaderServiceImpl implements JdbcMetaDataLoaderService { |
|
|
@Autowired DatasourceService datasourceService; |
|
|
@Autowired DatasourceService datasourceService; |
|
|
@Autowired MetaDataLoader metaDataLoader; |
|
|
@Autowired MetaDataLoader metaDataLoader; |
|
|
|
|
|
private Map<String,List<Table>> cache =new HashMap<>(); |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public List<Catalog> getCatalogs(String datasourceName) throws Exception { |
|
|
public List<Catalog> getCatalogs(String datasourceName) throws Exception { |
|
@ -48,16 +51,50 @@ public class JdbcMetaDataLoaderServiceImpl implements JdbcMetaDataLoaderService |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public List<Table> getTables(String datasourceName, String catalogName, String schemaName) throws Exception { |
|
|
public synchronized List<Table> getTables(String datasourceName, String catalogName, String schemaName) throws Exception { |
|
|
DataSource dataSource =null; |
|
|
String schemaId =getSchemaId(datasourceName,catalogName,schemaName); |
|
|
if(StringUtils.hasText(datasourceName)) { |
|
|
List<Table> tables =cache.get(schemaId); |
|
|
dataSource =datasourceService.getDatasource(datasourceName); |
|
|
if(tables==null || tables.isEmpty()) { |
|
|
}else{ |
|
|
DataSource dataSource = null; |
|
|
dataSource =datasourceService.getDefaultDatasource(); |
|
|
if (StringUtils.hasText(datasourceName)) { |
|
|
|
|
|
dataSource = datasourceService.getDatasource(datasourceName); |
|
|
|
|
|
} else { |
|
|
|
|
|
dataSource = datasourceService.getDefaultDatasource(); |
|
|
} |
|
|
} |
|
|
if(dataSource!=null){ |
|
|
if (dataSource != null) { |
|
|
return metaDataLoader.getTables(dataSource,catalogName,schemaName); |
|
|
tables =metaDataLoader.getTables(dataSource, catalogName, schemaName); |
|
|
|
|
|
cache.put(schemaId,tables); |
|
|
|
|
|
return tables; |
|
|
} |
|
|
} |
|
|
return Collections.emptyList(); |
|
|
return Collections.emptyList(); |
|
|
|
|
|
}else{ |
|
|
|
|
|
return tables; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public void reloadTables(String datasourceName,String catalogName,String schemaName) { |
|
|
|
|
|
String schemaId =getSchemaId(datasourceName,catalogName,schemaName); |
|
|
|
|
|
List<Table> tables =cache.get(schemaId); |
|
|
|
|
|
if(tables!=null && !tables.isEmpty()) { |
|
|
|
|
|
tables.clear(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private String getSchemaId(String datasourceName, String catalogName, String schemaName){ |
|
|
|
|
|
StringBuilder sb =new StringBuilder("/"); |
|
|
|
|
|
if(StringUtils.hasText(datasourceName)){ |
|
|
|
|
|
sb.append(datasourceName.trim()); |
|
|
} |
|
|
} |
|
|
|
|
|
sb.append("/"); |
|
|
|
|
|
if(StringUtils.hasText(catalogName)){ |
|
|
|
|
|
sb.append(catalogName.trim()); |
|
|
|
|
|
} |
|
|
|
|
|
sb.append("/"); |
|
|
|
|
|
if(StringUtils.hasText(schemaName)){ |
|
|
|
|
|
sb.append(schemaName.trim()); |
|
|
|
|
|
} |
|
|
|
|
|
return sb.toString(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|