fix: 优化驱动管理

This commit is contained in:
taojinlong 2022-05-25 23:07:59 +08:00
parent e0b380f1ca
commit 626f97935e
13 changed files with 63 additions and 21 deletions

View File

@ -45,7 +45,7 @@ public class DriverMgmController {
value = "id"
)
public void delete(@RequestBody DeDriver deDriver) throws Exception{
driverService.delete(deDriver.getId());
driverService.delete(deDriver);
}
@RequiresPermissions("datasource:read")

View File

@ -449,6 +449,9 @@ public class JdbcProvider extends DefaultJdbcProvider {
driverClassName = defaultDriver;
jdbcClassLoader = extendedJdbcClassLoader;
} else {
if(deDriver == null){
deDriver = deDriverMapper.selectByPrimaryKey(customDriver);
}
driverClassName = deDriver.getDriverClass();
jdbcClassLoader = getCustomJdbcClassLoader(deDriver);
}

View File

@ -406,6 +406,12 @@ public class DatasourceService {
return ApiProvider.checkApiDefinition(apiDefinition, response);
}
public List<Datasource> listByType(String type){
DatasourceExample example = new DatasourceExample();
example.createCriteria().andTypeEqualTo(type);
return datasourceMapper.selectByExampleWithBLOBs(example);
}
private void checkAndUpdateDatasourceStatus(Datasource datasource){
try {
Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType());

View File

@ -1,14 +1,20 @@
package io.dataease.service.datasource;
import com.google.gson.Gson;
import io.dataease.commons.utils.BeanUtils;
import io.dataease.commons.utils.DeFileUtils;
import io.dataease.dto.DriverDTO;
import io.dataease.dto.datasource.SqlServerConfiguration;
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.mapper.DeDriverDetailsMapper;
import io.dataease.plugins.common.base.mapper.DeDriverMapper;
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
import io.dataease.plugins.datasource.provider.ExtendedJdbcClassLoader;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@ -55,13 +61,18 @@ public class DriverService {
return driverDTOS;
}
public void delete(String driverId) {
deDriverMapper.deleteByPrimaryKey(driverId);
public void delete(DeDriver deDriver) {
for (Datasource datasource : datasourceService.listByType(deDriver.getType())) {
JdbcConfiguration configuration = new Gson().fromJson(datasource.getConfiguration(), JdbcConfiguration.class);
if(StringUtils.isNotEmpty(configuration.getCustomDriver()) && configuration.getCustomDriver().equalsIgnoreCase(deDriver.getId())){
throw new RuntimeException(Translator.get("I18N_DRIVER_NOT_DELETE"));
}
}
deDriverMapper.deleteByPrimaryKey(deDriver.getId());
DeDriverDetailsExample example = new DeDriverDetailsExample();
example.createCriteria().andDeDriverIdEqualTo(driverId);
example.createCriteria().andDeDriverIdEqualTo(deDriver.getId());
deDriverDetailsMapper.deleteByExample(example);
DeFileUtils.deleteFile(DRIVER_PATH + driverId + "/");
DeFileUtils.deleteFile(DRIVER_PATH + deDriver.getId() + "/");
}
public DeDriver save(DeDriver deDriver) {

View File

@ -149,3 +149,5 @@ SOURCE_TYPE_VIEW=VIEW
SOURCE_TYPE_USER=USER
SOURCE_TYPE_DEPT=ORG
SOURCE_TYPE_ROLE=ROLE
I18N_DRIVER_NOT_DELETE=Drivers in use cannot be deleted

View File

@ -152,3 +152,5 @@ I18N_OPERATE_TYPE=操作类型
I18N_DETAIL=操作详情
I18N_USER=操作人
I18N_TIME=操作时间
I18N_DRIVER_NOT_DELETE=使用中的驱动不允许删除

View File

@ -148,3 +148,5 @@ SOURCE_TYPE_VIEW=視圖
SOURCE_TYPE_USER=用戶
SOURCE_TYPE_DEPT=組織
SOURCE_TYPE_ROLE=角色
I18N_DRIVER_NOT_DELETE=使用中的驅動不允許删除

View File

@ -1337,7 +1337,8 @@ export default {
modify: 'Modify',
show_info: 'Driver info',
file_name: 'File name',
version: 'version'
version: 'version',
please_set_driverClass: 'Please specify driver class'
},
datasource: {
auth_method: 'Auth method',

View File

@ -1337,7 +1337,8 @@ export default {
modify: '修改',
show_info: '驅動信息',
file_name: '文件名',
version: '版本'
version: '版本',
please_set_driverClass: '請指定驅動類'
},
datasource: {
auth_method: '認證方式',

View File

@ -1339,7 +1339,8 @@ export default {
modify: '修改',
show_info: '驱动信息',
file_name: '文件名',
version: '版本'
version: '版本',
please_set_driverClass: '请指定驱动类',
},
datasource: {
auth_method: '认证方式',

View File

@ -26,7 +26,7 @@
<el-form-item :label="$t('commons.name')" prop="name">
<el-input v-model="driverForm.name" autocomplete="off"/>
</el-form-item>
<el-form-item :label="$t('commons.description')" prop="desc">
<el-form-item :label="$t('commons.description')">
<el-input v-model="driverForm.desc" autocomplete="off"/>
</el-form-item>
<el-form-item :label="$t('datasource.type')" prop="type">
@ -62,7 +62,7 @@
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item :label="$t('driver.driver')" >
<el-form-item :label="$t('driver.driver')" prop="driverClass">
<el-input v-model="driverForm.driverClass" autocomplete="off"/>
</el-form-item>
@ -90,7 +90,7 @@
</el-upload>
<fu-table :data="driverFiles">
<el-table-column prop="fileName" :label="$t('driver.file_name')"/>
<el-table-column prop="version" :label="$t('driver.version')"/>
<!-- <el-table-column prop="version" :label="$t('driver.version')"/>-->
<fu-table-operations :buttons="buttons" :label="$t('commons.operating')" fix/>
</fu-table>
@ -151,7 +151,8 @@ export default {
{min: 2, max: 50, message: i18n.t('datasource.input_limit_2_25', [2, 25]), trigger: 'blur'}],
desc: [{required: true, message: i18n.t('datasource.input_name'), trigger: 'blur'},
{min: 2, max: 200, message: i18n.t('datasource.input_limit_2_25', [2, 25]), trigger: 'blur'}],
type: [{required: true, message: i18n.t('datasource.please_choose_type'), trigger: 'blur'}]
type: [{required: true, message: i18n.t('datasource.please_choose_type'), trigger: 'blur'}],
driverClass: [{required: true, message: i18n.t('driver.please_set_driverClass'), trigger: 'blur'}]
},
canEdit: false,
driverFiles: [],
@ -231,9 +232,14 @@ export default {
this.disabled = this.params && this.params.id && this.params.showModel && this.params.showModel === 'show' && !this.canEdit
},
save(){
updateDriver(this.driverForm).then(res => {
this.$success(i18n.t('commons.success'))
this.canEdit = false
this.$refs.driverForm.validate(valid => {
if (!valid) {
return false
}
updateDriver(this.driverForm).then(res => {
this.$success(i18n.t('commons.success'))
this.canEdit = false
})
})
},
reset() {

View File

@ -137,7 +137,7 @@ export default {
acquireIncrement: 5,
idleConnectionTestPeriod: 5,
connectTimeout: 5,
customDriver: ''
customDriver: 'default'
},
apiConfiguration: []
},
@ -286,7 +286,7 @@ export default {
acquireIncrement: 5,
idleConnectionTestPeriod: 5,
connectTimeout: 5,
customDriver: ''
customDriver: 'default'
}
},
@ -525,7 +525,7 @@ export default {
if (this.dsTypes[i].type === this.form.type) {
if(this.form.type !== 'api' && !init){
this.form.configuration.extraParams = this.dsTypes[i].extraParams
this.form.configuration.customDriver = ''
this.form.configuration.customDriver = 'default'
}
this.datasourceType = this.dsTypes[i]
if(this.datasourceType.isJdbc){

View File

@ -111,7 +111,7 @@
<el-form-item :label="$t('commons.name')" prop="name">
<el-input v-model="driverForm.name"/>
</el-form-item>
<el-form-item :label="$t('commons.description')" prop="desc">
<el-form-item :label="$t('commons.description')">
<el-input v-model="driverForm.desc"/>
</el-form-item>
<el-form-item :label="$t('datasource.type')" prop="type">
@ -123,7 +123,7 @@
filterable
>
<el-option
v-for="item in dsTypes"
v-for="item in dsTypesForDriver"
:key="item.type"
:label="item.name"
:value="item.type"
@ -156,6 +156,7 @@ import {
delDriver,
listDriverByType
} from '@/api/system/datasource'
import {ApplicationContext} from "@/utils/ApplicationContext";
export default {
name: 'DsTree',
@ -170,6 +171,7 @@ export default {
expandedArray: [],
tData: [],
dsTypes: [],
dsTypesForDriver: [],
showSearchInput: false,
key: '',
showView: 'Datasource',
@ -242,6 +244,11 @@ export default {
datasourceTypes() {
listDatasourceType().then(res => {
this.dsTypes = res.data
this.dsTypes.forEach(item => {
if(item.isJdbc){
this.dsTypesForDriver.push(item)
}
})
})
},
refreshType(datasource) {