fix: 自定义驱动

This commit is contained in:
taojinlong 2022-05-30 21:23:03 +08:00
parent f365527520
commit d49f617c91
5 changed files with 38 additions and 12 deletions

View File

@ -79,7 +79,18 @@ public class JdbcProvider extends DefaultJdbcProvider {
List<TableField> list = new LinkedList<>();
try (Connection connection = getConnectionFromPool(datasourceRequest)) {
if (datasourceRequest.getDatasource().getType().equalsIgnoreCase("oracle")) {
Method setRemarksReporting = extendedJdbcClassLoader.loadClass("oracle.jdbc.driver.OracleConnection").getMethod("setRemarksReporting", boolean.class);
ExtendedJdbcClassLoader classLoader;
String driverClass;
OracleConfiguration oracleConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), OracleConfiguration.class);
if (isDefaultClassLoader(oracleConfiguration.getCustomDriver())) {
classLoader = extendedJdbcClassLoader;
driverClass = oracleConfiguration.getDriver();
} else {
DeDriver deDriver = deDriverMapper.selectByPrimaryKey(oracleConfiguration.getCustomDriver());
classLoader = getCustomJdbcClassLoader(deDriver);
driverClass = deDriver.getDriverClass();
}
Method setRemarksReporting = classLoader.loadClass(driverClass).getMethod("setRemarksReporting", boolean.class);
setRemarksReporting.invoke(((DruidPooledConnection) connection).getConnection(), true);
}
DatabaseMetaData databaseMetaData = connection.getMetaData();

View File

@ -1,5 +1,6 @@
package io.dataease.service.datasource;
import cn.hutool.core.collection.CollectionUtil;
import com.google.gson.Gson;
import io.dataease.commons.constants.SysLogConstants;
import io.dataease.commons.utils.BeanUtils;
@ -8,14 +9,13 @@ import io.dataease.commons.utils.DeLogUtils;
import io.dataease.dto.DriverDTO;
import io.dataease.dto.SysLogDTO;
import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.Datasource;
import io.dataease.plugins.common.base.domain.DeDriver;
import io.dataease.plugins.common.base.domain.DeDriverDetails;
import io.dataease.plugins.common.base.domain.DeDriverDetailsExample;
import io.dataease.plugins.common.base.domain.*;
import io.dataease.plugins.common.base.mapper.DeDriverDetailsMapper;
import io.dataease.plugins.common.base.mapper.DeDriverMapper;
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
import io.dataease.plugins.datasource.provider.DefaultJdbcProvider;
import io.dataease.plugins.datasource.provider.ExtendedJdbcClassLoader;
import io.dataease.provider.ProviderFactory;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -27,10 +27,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Modifier;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.UUID;
import java.util.*;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
@ -78,6 +75,15 @@ public class DriverService {
}
public DeDriver save(DeDriver deDriver) {
if(StringUtils.isEmpty(deDriver.getName()) || StringUtils.isEmpty(deDriver.getType())){
throw new RuntimeException("Name or Type cannot be empty.");
}
DeDriverExample example = new DeDriverExample();
example.createCriteria().andNameEqualTo(deDriver.getName());
if(CollectionUtil.isNotEmpty(deDriverMapper.selectByExample(example))){
throw new RuntimeException(Translator.get("I18N_DRIVER_REPEAT_NAME"));
}
deDriver.setCreateTime(System.currentTimeMillis());
deDriver.setId(UUID.randomUUID().toString());
deDriverMapper.insert(deDriver);
@ -96,12 +102,15 @@ public class DriverService {
return deDriverDetailsMapper.selectByExampleWithBLOBs(example);
}
public void deleteDriverFile(String driverFileId) {
public void deleteDriverFile(String driverFileId) throws Exception{
DeDriverDetails deDriverDetails = deDriverDetailsMapper.selectByPrimaryKey(driverFileId);
DeDriver deDriver = deDriverMapper.selectByPrimaryKey(deDriverDetails.getDeDriverId());
DeFileUtils.deleteFile(DRIVER_PATH + deDriverDetails.getDeDriverId() + "/" + deDriverDetails.getFileName());
SysLogDTO sysLogDTO = DeLogUtils.buildLog(SysLogConstants.OPERATE_TYPE.DELETE, SysLogConstants.SOURCE_TYPE.DRIVER_FILE, deDriverDetails.getId(), deDriverDetails.getDeDriverId(), null, null);
DeLogUtils.save(sysLogDTO);
deDriverDetailsMapper.deleteByPrimaryKey(driverFileId);
DefaultJdbcProvider defaultJdbcProvider = (DefaultJdbcProvider)ProviderFactory.getProvider(deDriver.getType());
defaultJdbcProvider.reloadCustomJdbcClassLoader(deDriver);
}
public DeDriverDetails saveJar(MultipartFile file, String driverId) throws Exception {
@ -129,6 +138,9 @@ public class DriverService {
deDriverDetailsMapper.insert(deDriverDetails);
SysLogDTO sysLogDTO = DeLogUtils.buildLog(SysLogConstants.OPERATE_TYPE.UPLOADFILE, SysLogConstants.SOURCE_TYPE.DRIVER_FILE, deDriverDetails.getId(), driverId, null, null);
DeLogUtils.save(sysLogDTO);
DeDriver deDriver = deDriverMapper.selectByPrimaryKey(driverId);
DefaultJdbcProvider defaultJdbcProvider = (DefaultJdbcProvider)ProviderFactory.getProvider(deDriver.getType());
defaultJdbcProvider.reloadCustomJdbcClassLoader(deDriver);
return deDriverDetails;
}

View File

@ -154,4 +154,5 @@ SOURCE_TYPE_DRIVER=DRIVER
SOURCE_TYPE_DRIVER_FILE=DRIVER FILE
SOURCE_TYPE_MENU=MENU
I18N_DRIVER_NOT_DELETE=Drivers in use cannot be deleted
I18N_DRIVER_NOT_DELETE=Drivers in use cannot be deleted
I18N_DRIVER_REPEAT_NAME=Driver name cannot be same.

View File

@ -158,3 +158,4 @@ I18N_USER=操作人
I18N_TIME=操作时间
I18N_DRIVER_NOT_DELETE=使用中的驱动不允许删除
I18N_DRIVER_REPEAT_NAME=名称重复

View File

@ -153,4 +153,5 @@ SOURCE_TYPE_DRIVER=驅動
SOURCE_TYPE_DRIVER_FILE=驅動文件
SOURCE_TYPE_MENU=菜單
I18N_DRIVER_NOT_DELETE=使用中的驅動不允許删除
I18N_DRIVER_NOT_DELETE=使用中的驅動不允許删除
I18N_DRIVER_REPEAT_NAME=名稱重複