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}")
public List<DriverDTO> listDeDriver(@PathVariable String type) throws Exception {
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 -> {
if (StringUtils.isEmpty(driverDTO1.getSurpportVersions())) {
driverDTO1.setNameAlias(driverDTO1.getName());

View File

@ -581,10 +581,16 @@ public class JdbcProvider extends DefaultJdbcProvider {
if (isDefaultClassLoader(customDriver)) {
driverClassName = defaultDriver;
jdbcClassLoader = extendedJdbcClassLoader;
for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) {
if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) {
surpportVersions = value.getSurpportVersions();
DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType());
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 {
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.mapper.DeDriverDetailsMapper;
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.provider.DefaultJdbcProvider;
import io.dataease.plugins.datasource.provider.ExtendedJdbcClassLoader;
@ -30,6 +31,7 @@ import java.lang.reflect.Modifier;
import java.util.*;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.stream.Collectors;
@Transactional(rollbackFor = Exception.class)
@Service
@ -46,20 +48,54 @@ public class DriverService {
public List<DriverDTO> list() throws Exception {
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();
BeanUtils.copyBean(driverDTO, deDriver);
datasourceService.types().forEach(dataSourceType -> {
dataSourceTypes.forEach(dataSourceType -> {
if (dataSourceType.getType().equalsIgnoreCase(deDriver.getType())) {
driverDTO.setTypeDesc(dataSourceType.getName());
}
});
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;
}
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) {
for (Datasource datasource : datasourceService.listByType(deDriver.getType())) {
JdbcConfiguration configuration = new Gson().fromJson(datasource.getConfiguration(), JdbcConfiguration.class);
@ -90,7 +126,17 @@ public class DriverService {
}
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;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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