Driver configuration is configured through json,

Support driver attribute configuration.
This commit is contained in:
SwallowGG
2023-11-12 22:25:51 +08:00
parent 12c1c46bcd
commit eed78015dc
75 changed files with 859 additions and 467 deletions

View File

@ -0,0 +1,13 @@
package ai.chat2db.server.domain.core.converter;
import ai.chat2db.server.domain.repository.entity.JdbcDriverDO;
import ai.chat2db.spi.config.DriverConfig;
import lombok.extern.slf4j.Slf4j;
import org.mapstruct.Mapper;
@Slf4j
@Mapper(componentModel = "spring")
public abstract class DriverConfigConverter {
public abstract DriverConfig do2Config(JdbcDriverDO driverDO);
}

View File

@ -89,10 +89,13 @@ public class DataSourceServiceImpl implements DataSourceService {
if (dataSourceKind == DataSourceKindEnum.SHARED && !ContextUtils.getLoginUser().getAdmin()) {
throw new PermissionDeniedBusinessException();
}
JdbcUtils.removePropertySameAsDefault(param.getDriverConfig());
DataSourceDO dataSourceDO = dataSourceConverter.param2do(param);
dataSourceDO.setGmtCreate(DateUtil.date());
dataSourceDO.setGmtModified(DateUtil.date());
dataSourceDO.setUserId(ContextUtils.getUserId());
dataSourceDO.setExtendInfo(null);
dataSourceMapper.insert(dataSourceDO);
preWarmingData(dataSourceDO.getId());
return DataResult.of(dataSourceDO.getId());
@ -125,6 +128,7 @@ public class DataSourceServiceImpl implements DataSourceService {
DataSource dataSource = queryExistent(param.getId(), null).getData();
PermissionUtils.checkOperationPermission(dataSource.getUserId());
JdbcUtils.removePropertySameAsDefault(param.getDriverConfig());
DataSourceDO dataSourceDO = dataSourceConverter.param2do(param);
dataSourceDO.setGmtModified(DateUtil.date());
dataSourceMapper.updateById(dataSourceDO);

View File

@ -1,12 +1,7 @@
package ai.chat2db.server.domain.core.impl;
import java.io.File;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import ai.chat2db.server.domain.api.service.JdbcDriverService;
import ai.chat2db.server.domain.core.converter.DriverConfigConverter;
import ai.chat2db.server.domain.repository.entity.JdbcDriverDO;
import ai.chat2db.server.domain.repository.mapper.JdbcDriverMapper;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
@ -22,6 +17,16 @@ import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static ai.chat2db.spi.util.JdbcUtils.setDriverDefaultProperty;
@Slf4j
@Service
public class JdbcDriverServiceImpl implements JdbcDriverService {
@ -29,50 +34,31 @@ public class JdbcDriverServiceImpl implements JdbcDriverService {
@Autowired
private JdbcDriverMapper jdbcDriverMapper;
@Autowired
private DriverConfigConverter driverConfigConverter;
@Override
public DataResult<DBConfig> getDrivers(String dbType) {
Map<String, DriverConfig> driverConfigMap = new LinkedHashMap<>();
LambdaQueryWrapper<JdbcDriverDO> query = new LambdaQueryWrapper<JdbcDriverDO>();
query.eq(JdbcDriverDO::getDbType, dbType);
List<JdbcDriverDO> driverDOS = jdbcDriverMapper.selectList(query);
List<DriverConfig> driverConfigs = Lists.newArrayList();
if (!CollectionUtils.isEmpty(driverDOS)) {
for (JdbcDriverDO driverConfig : driverDOS) {
String[] jarPaths = driverConfig.getJdbcDriver().split(",");
boolean flag = true;
for (String jarPath : jarPaths) {
File file = new File(JdbcJarUtils.PATH + jarPath);
if (!file.exists()) {
flag = false;
break;
}
}
if (flag && driverConfigMap.get(driverConfig.getJdbcDriver()) == null) {
DriverConfig dc = new DriverConfig();
dc.setCustom(true);
dc.setDbType(driverConfig.getDbType());
dc.setJdbcDriver(driverConfig.getJdbcDriver());
dc.setJdbcDriverClass(driverConfig.getJdbcDriverClass());
driverConfigMap.put(driverConfig.getJdbcDriver(), dc);
} else {
log.warn("Driver file not found: {}", driverConfig.getJdbcDriver());
}
}
driverConfigs = driverDOS.stream().map(driverConfigConverter::do2Config).collect(Collectors.toList());
}
DBConfig dbConfig = Chat2DBContext.PLUGIN_MAP.get(dbType).getDBConfig();
List<DriverConfig> driverConfigList = dbConfig.getDriverConfigList();
for (DriverConfig driverConfig : driverConfigList) {
String[] jarPaths = driverConfig.getJdbcDriver().split(",");
boolean flag = true;
for (String jarPath : jarPaths) {
File file = new File(JdbcJarUtils.PATH + jarPath);
if (!file.exists()) {
flag = false;
break;
}
}
if (CollectionUtils.isNotEmpty(driverConfigList)) {
driverConfigs.addAll(driverConfigList);
}
for (DriverConfig driverConfig : driverConfigs) {
boolean flag = driverExists(driverConfig);
if (flag && driverConfigMap.get(driverConfig.getJdbcDriver()) == null) {
driverConfigMap.put(driverConfig.getJdbcDriver(), driverConfig);
setDriverDefaultProperty(driverConfig);
} else {
log.warn("Driver file not found: {}", driverConfig.getJdbcDriver());
}
@ -81,6 +67,20 @@ public class JdbcDriverServiceImpl implements JdbcDriverService {
return DataResult.of(dbConfig);
}
private boolean driverExists(DriverConfig driverConfig) {
boolean flag = true;
String[] jarPaths = driverConfig.getJdbcDriver().split(",");
for (String jarPath : jarPaths) {
File file = new File(JdbcJarUtils.PATH + jarPath);
if (!file.exists()) {
flag = false;
break;
}
}
return flag;
}
@Override
public ActionResult upload(String dbType, String jdbcDriverClass, String localPath) {
JdbcDriverDO driverDO = new JdbcDriverDO();