mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-08-01 18:53:35 +08:00
Driver configuration is configured through json,
Support driver attribute configuration.
This commit is contained in:
@ -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);
|
||||
|
||||
}
|
@ -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);
|
||||
|
@ -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();
|
||||
|
Reference in New Issue
Block a user