Merge pull request #8460 from dataease/pr@dev@featdriver

feat: 驱动管理可以支持配置内置驱动的版本范围
This commit is contained in:
taojinlong 2024-03-12 17:56:01 +08:00 committed by GitHub
commit 78775b4072
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 124 additions and 39 deletions

View File

@ -63,16 +63,6 @@ public class DriverMgmController {
@GetMapping("/list/{type}") @GetMapping("/list/{type}")
public List<DriverDTO> listDeDriver(@PathVariable String type) throws Exception { public List<DriverDTO> listDeDriver(@PathVariable String type) throws Exception {
List<DriverDTO> driverDTOS = listDeDriver().stream().filter(driverDTO -> driverDTO.getType().equalsIgnoreCase(type)).collect(Collectors.toList()); List<DriverDTO> driverDTOS = listDeDriver().stream().filter(driverDTO -> driverDTO.getType().equalsIgnoreCase(type)).collect(Collectors.toList());
DriverDTO driverDTO = new DriverDTO();
driverDTO.setId("default");
driverDTO.setName("default");
driverDTO.setDriverClass("default");
datasourceService.types().forEach(dataSourceType -> {
if (dataSourceType.getType().equalsIgnoreCase(type)) {
driverDTO.setSurpportVersions(dataSourceType.getSurpportVersions());
}
});
driverDTOS.add(driverDTO);
driverDTOS.forEach(driverDTO1 -> { driverDTOS.forEach(driverDTO1 -> {
if (StringUtils.isEmpty(driverDTO1.getSurpportVersions())) { if (StringUtils.isEmpty(driverDTO1.getSurpportVersions())) {
driverDTO1.setNameAlias(driverDTO1.getName()); driverDTO1.setNameAlias(driverDTO1.getName());

View File

@ -581,10 +581,16 @@ public class JdbcProvider extends DefaultJdbcProvider {
if (isDefaultClassLoader(customDriver)) { if (isDefaultClassLoader(customDriver)) {
driverClassName = defaultDriver; driverClassName = defaultDriver;
jdbcClassLoader = extendedJdbcClassLoader; jdbcClassLoader = extendedJdbcClassLoader;
for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) {
if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) { DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType());
surpportVersions = value.getSurpportVersions(); if(driver == null){
for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) {
if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) {
surpportVersions = value.getSurpportVersions();
}
} }
}else {
surpportVersions = driver.getSurpportVersions();
} }
} else { } else {
if (deDriver == null) { if (deDriver == null) {

View File

@ -12,6 +12,7 @@ import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.*; import io.dataease.plugins.common.base.domain.*;
import io.dataease.plugins.common.base.mapper.DeDriverDetailsMapper; import io.dataease.plugins.common.base.mapper.DeDriverDetailsMapper;
import io.dataease.plugins.common.base.mapper.DeDriverMapper; import io.dataease.plugins.common.base.mapper.DeDriverMapper;
import io.dataease.plugins.common.dto.datasource.DataSourceType;
import io.dataease.plugins.datasource.entity.JdbcConfiguration; import io.dataease.plugins.datasource.entity.JdbcConfiguration;
import io.dataease.plugins.datasource.provider.DefaultJdbcProvider; import io.dataease.plugins.datasource.provider.DefaultJdbcProvider;
import io.dataease.plugins.datasource.provider.ExtendedJdbcClassLoader; import io.dataease.plugins.datasource.provider.ExtendedJdbcClassLoader;
@ -30,6 +31,7 @@ import java.lang.reflect.Modifier;
import java.util.*; import java.util.*;
import java.util.jar.JarEntry; import java.util.jar.JarEntry;
import java.util.jar.JarFile; import java.util.jar.JarFile;
import java.util.stream.Collectors;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Service @Service
@ -46,20 +48,54 @@ public class DriverService {
public List<DriverDTO> list() throws Exception { public List<DriverDTO> list() throws Exception {
List<DriverDTO> driverDTOS = new ArrayList<>(); List<DriverDTO> driverDTOS = new ArrayList<>();
deDriverMapper.selectByExampleWithBLOBs(null).forEach(deDriver -> { Collection<DataSourceType> dataSourceTypes = datasourceService.types();
List<String> dsTypes = datasourceService.types().stream().map(DataSourceType::getType).collect(Collectors.toList());
List<DeDriver> deDrivers = deDriverMapper.selectByExampleWithBLOBs(null);
List<String> driverTypes = deDrivers.stream().filter(deDriver -> deDriver.getId().contains("default")).map(DeDriver::getType).collect(Collectors.toList());
deDrivers.forEach(deDriver -> {
DriverDTO driverDTO = new DriverDTO(); DriverDTO driverDTO = new DriverDTO();
BeanUtils.copyBean(driverDTO, deDriver); BeanUtils.copyBean(driverDTO, deDriver);
datasourceService.types().forEach(dataSourceType -> { dataSourceTypes.forEach(dataSourceType -> {
if (dataSourceType.getType().equalsIgnoreCase(deDriver.getType())) { if (dataSourceType.getType().equalsIgnoreCase(deDriver.getType())) {
driverDTO.setTypeDesc(dataSourceType.getName()); driverDTO.setTypeDesc(dataSourceType.getName());
} }
}); });
driverDTOS.add(driverDTO); driverDTOS.add(driverDTO);
}); });
for (String dsType : dsTypes) {
if(!driverTypes.contains(dsType)){
DriverDTO driverDTO = new DriverDTO();
driverDTO.setId("default-" + dsType);
driverDTO.setName("default");
driverDTO.setType(dsType);
dataSourceTypes.forEach(dataSourceType -> {
if (dataSourceType.getType().equalsIgnoreCase(dsType)) {
driverDTO.setTypeDesc(dataSourceType.getName());
driverDTO.setSurpportVersions(dataSourceType.getSurpportVersions());
}
});
driverDTOS.add(driverDTO);
}
}
return driverDTOS; return driverDTOS;
} }
public DeDriver getDefaultDeDriver(String type){
DeDriver deDriver = deDriverMapper.selectByPrimaryKey("default-" + type);
if(deDriver == null){
deDriver = new DeDriver();
deDriver.setId("default-" + type);
deDriver.setName("default");
deDriver.setType(type);
for (DataSourceType dataSourceType : datasourceService.types()) {
if (dataSourceType.getType().equalsIgnoreCase(type)) {
deDriver.setSurpportVersions(dataSourceType.getSurpportVersions());
}
}
}
return deDriver;
}
public void delete(DeDriver deDriver) { public void delete(DeDriver deDriver) {
for (Datasource datasource : datasourceService.listByType(deDriver.getType())) { for (Datasource datasource : datasourceService.listByType(deDriver.getType())) {
JdbcConfiguration configuration = new Gson().fromJson(datasource.getConfiguration(), JdbcConfiguration.class); JdbcConfiguration configuration = new Gson().fromJson(datasource.getConfiguration(), JdbcConfiguration.class);
@ -90,7 +126,17 @@ public class DriverService {
} }
public DeDriver update(DeDriver deDriver) { public DeDriver update(DeDriver deDriver) {
deDriverMapper.updateByPrimaryKeyWithBLOBs(deDriver); if(StringUtils.isNotEmpty(deDriver.getId()) && deDriver.getId().contains("default")){
if(deDriverMapper.selectByPrimaryKey(deDriver.getId()) != null){
deDriverMapper.updateByPrimaryKeyWithBLOBs(deDriver);
}else {
deDriver.setCreateTime(System.currentTimeMillis());
deDriverMapper.insert(deDriver);
}
}else {
deDriverMapper.updateByPrimaryKeyWithBLOBs(deDriver);
}
return deDriver; return deDriver;
} }

View File

@ -19,7 +19,7 @@
label-width="180px" label-width="180px"
label-position="right" label-position="right"
> >
<el-form-item <el-form-item v-if="showItem(driverForm.id)"
:label="$t('driver.driver')" :label="$t('driver.driver')"
prop="driverClass" prop="driverClass"
> >
@ -41,6 +41,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-upload <el-upload
v-show="showItem(driverForm.id)"
:action="baseUrl + 'driver/file/upload'" :action="baseUrl + 'driver/file/upload'"
:multiple="true" :multiple="true"
:show-file-list="false" :show-file-list="false"
@ -62,7 +63,7 @@
{{ uploading ? $t('dataset.uploading') : $t('dataset.upload_file') }} {{ uploading ? $t('dataset.uploading') : $t('dataset.upload_file') }}
</deBtn> </deBtn>
</el-upload> </el-upload>
<p class="tips"> <p class="tips" v-show="showItem(driverForm.id)">
{{ $t('datasource.can_be_uploaded') }} {{ $t('datasource.can_be_uploaded') }}
</p> </p>
<div class="jar-cont"> <div class="jar-cont">
@ -303,7 +304,14 @@ export default {
}, },
refreshType(form) { refreshType(form) {
this.$emit('refresh-type', form) this.$emit('refresh-type', form)
} },
showItem(id){
if (id !== '' && id.indexOf("default") !== -1) {
return false
} else {
return true
}
},
} }
} }
</script> </script>

View File

@ -216,7 +216,7 @@
:label="$t('datasource.driver_name')" :label="$t('datasource.driver_name')"
prop="name" prop="name"
> >
<el-input <el-input :disabled="disabledEdit(driverForm.id)"
v-model="driverForm.name" v-model="driverForm.name"
:placeholder="$t('fu.search_bar.please_input')" :placeholder="$t('fu.search_bar.please_input')"
/> />
@ -379,6 +379,7 @@ export default {
dialogTitle: '', dialogTitle: '',
editDriver: false, editDriver: false,
driverForm: { driverForm: {
id: '',
name: '', name: '',
desc: '', desc: '',
type: '' type: ''
@ -457,6 +458,13 @@ export default {
handleClick() { handleClick() {
document.querySelector(`.${this.tabActive}`).scrollIntoView() document.querySelector(`.${this.tabActive}`).scrollIntoView()
}, },
disabledEdit(id){
if (id !== '' && id.indexOf("default") !== -1) {
return true
} else {
return false
}
},
createDriveOrDs() { createDriveOrDs() {
if (this.showView === 'Driver') { if (this.showView === 'Driver') {
this.addDriver() this.addDriver()
@ -830,6 +838,7 @@ export default {
this.$refs['driverForm'].resetFields() this.$refs['driverForm'].resetFields()
this.editDriver = false this.editDriver = false
this.driverForm = { this.driverForm = {
id: '',
name: '', name: '',
desc: '', desc: '',
type: '' type: ''

View File

@ -82,10 +82,15 @@ public class DmDsProvider extends DefaultJdbcProvider {
if (isDefaultClassLoader(customDriver)) { if (isDefaultClassLoader(customDriver)) {
driverClassName = defaultDriver; driverClassName = defaultDriver;
jdbcClassLoader = extendedJdbcClassLoader; jdbcClassLoader = extendedJdbcClassLoader;
for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType());
if(value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())){ if (driver == null) {
surpportVersions = value.getSurpportVersions(); for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) {
if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) {
surpportVersions = value.getSurpportVersions();
}
} }
} else {
surpportVersions = driver.getSurpportVersions();
} }
} else { } else {
if (deDriver == null) { if (deDriver == null) {
@ -107,10 +112,10 @@ public class DmDsProvider extends DefaultJdbcProvider {
} finally { } finally {
Thread.currentThread().setContextClassLoader(classLoader); Thread.currentThread().setContextClassLoader(classLoader);
} }
if(StringUtils.isNotEmpty(surpportVersions) && surpportVersions.split(",").length > 0){ if (StringUtils.isNotEmpty(surpportVersions) && surpportVersions.split(",").length > 0) {
if(! Arrays.asList(surpportVersions.split(",")).contains(String.valueOf(conn.getMetaData().getDatabaseMajorVersion()))){ if (!Arrays.asList(surpportVersions.split(",")).contains(String.valueOf(conn.getMetaData().getDatabaseMajorVersion()))) {
DataEaseException.throwException("当前驱动不支持此版本!"); DataEaseException.throwException("当前驱动不支持此版本!");
}; }
} }
return conn; return conn;
} }

View File

@ -64,10 +64,15 @@ public class KingbaseDsProvider extends DefaultJdbcProvider {
if (isDefaultClassLoader(customDriver)) { if (isDefaultClassLoader(customDriver)) {
driverClassName = defaultDriver; driverClassName = defaultDriver;
jdbcClassLoader = extendedJdbcClassLoader; jdbcClassLoader = extendedJdbcClassLoader;
for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType());
if(value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())){ if (driver == null) {
surpportVersions = value.getSurpportVersions(); for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) {
if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) {
surpportVersions = value.getSurpportVersions();
}
} }
} else {
surpportVersions = driver.getSurpportVersions();
} }
} else { } else {
if (deDriver == null) { if (deDriver == null) {

View File

@ -58,10 +58,15 @@ public class KylinDsProvider extends DefaultJdbcProvider {
if(isDefaultClassLoader(customDriver)){ if(isDefaultClassLoader(customDriver)){
driverClassName = defaultDriver; driverClassName = defaultDriver;
jdbcClassLoader = extendedJdbcClassLoader; jdbcClassLoader = extendedJdbcClassLoader;
for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType());
if(value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())){ if (driver == null) {
surpportVersions = value.getSurpportVersions(); for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) {
if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) {
surpportVersions = value.getSurpportVersions();
}
} }
} else {
surpportVersions = driver.getSurpportVersions();
} }
}else { }else {
if(deDriver == null){ if(deDriver == null){

View File

@ -62,10 +62,15 @@ public class MongobiDsProvider extends DefaultJdbcProvider {
if(isDefaultClassLoader(customDriver)){ if(isDefaultClassLoader(customDriver)){
driverClassName = defaultDriver; driverClassName = defaultDriver;
jdbcClassLoader = extendedJdbcClassLoader; jdbcClassLoader = extendedJdbcClassLoader;
for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType());
if(value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())){ if (driver == null) {
surpportVersions = value.getSurpportVersions(); for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) {
if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) {
surpportVersions = value.getSurpportVersions();
}
} }
} else {
surpportVersions = driver.getSurpportVersions();
} }
}else { }else {
if(deDriver == null){ if(deDriver == null){

View File

@ -54,10 +54,15 @@ public class PrestoDsProvider extends DefaultJdbcProvider {
ExtendedJdbcClassLoader classLoader; ExtendedJdbcClassLoader classLoader;
if(isDefaultClassLoader(customDriver)){ if(isDefaultClassLoader(customDriver)){
classLoader = extendedJdbcClassLoader; classLoader = extendedJdbcClassLoader;
for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType());
if(value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())){ if (driver == null) {
surpportVersions = value.getSurpportVersions(); for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) {
if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) {
surpportVersions = value.getSurpportVersions();
}
} }
} else {
surpportVersions = driver.getSurpportVersions();
} }
}else { }else {
deDriver = deDriverMapper.selectByPrimaryKey(customDriver); deDriver = deDriverMapper.selectByPrimaryKey(customDriver);

View File

@ -20,6 +20,7 @@ public abstract class ViewPluginService extends PluginComponentService {
private PluginViewRSHandler<Map> rsHandler; private PluginViewRSHandler<Map> rsHandler;
public abstract PluginViewType viewType(); public abstract PluginViewType viewType();
public abstract Object format(Object param); public abstract Object format(Object param);