Merge pull request #8460 from dataease/pr@dev@featdriver
feat: 驱动管理可以支持配置内置驱动的版本范围
This commit is contained in:
commit
78775b4072
@ -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());
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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: ''
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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){
|
||||||
|
|||||||
@ -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){
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user