diff --git a/backend/src/main/java/io/dataease/dto/datasource/DorisConfiguration.java b/backend/src/main/java/io/dataease/dto/datasource/DorisConfiguration.java index 18f3f41806..f3edc95760 100644 --- a/backend/src/main/java/io/dataease/dto/datasource/DorisConfiguration.java +++ b/backend/src/main/java/io/dataease/dto/datasource/DorisConfiguration.java @@ -8,4 +8,7 @@ import lombok.Setter; public class DorisConfiguration extends MysqlConfiguration { private Integer httpPort; + + private Integer replicationNum = 1; + private Integer bucketNum = 10; } diff --git a/backend/src/main/java/io/dataease/provider/DDLProvider.java b/backend/src/main/java/io/dataease/provider/DDLProvider.java index 758e9fc925..ea238d8957 100644 --- a/backend/src/main/java/io/dataease/provider/DDLProvider.java +++ b/backend/src/main/java/io/dataease/provider/DDLProvider.java @@ -1,6 +1,7 @@ package io.dataease.provider; import io.dataease.base.domain.DatasetTableField; +import io.dataease.base.domain.Datasource; import java.util.List; @@ -17,7 +18,7 @@ public abstract class DDLProvider { public abstract String replaceTable(String name); - public abstract String createTableSql(String name, List datasetTableFields); + public abstract String createTableSql(String name, List datasetTableFields, Datasource engine); public abstract String insertSql(String name, List dataList, int page, int pageNumber); } diff --git a/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java b/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java index f90781fcb3..0e53560056 100644 --- a/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java +++ b/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java @@ -1,6 +1,7 @@ package io.dataease.provider; import io.dataease.base.domain.DatasetTableField; +import io.dataease.base.domain.Datasource; import io.dataease.commons.utils.Md5Utils; import java.util.Arrays; @@ -28,7 +29,7 @@ public class DDLProviderImpl extends DDLProvider { } @Override - public String createTableSql(String name, List datasetTableFields) { + public String createTableSql(String name, List datasetTableFields, Datasource engine) { return null; } diff --git a/backend/src/main/java/io/dataease/provider/engine/doris/DorisDDLProvider.java b/backend/src/main/java/io/dataease/provider/engine/doris/DorisDDLProvider.java index 1d9965e2ca..950e146898 100644 --- a/backend/src/main/java/io/dataease/provider/engine/doris/DorisDDLProvider.java +++ b/backend/src/main/java/io/dataease/provider/engine/doris/DorisDDLProvider.java @@ -1,7 +1,12 @@ package io.dataease.provider.engine.doris; +import com.google.gson.Gson; import io.dataease.base.domain.DatasetTableField; +import io.dataease.base.domain.Datasource; import io.dataease.commons.utils.TableUtils; +import io.dataease.dto.datasource.DorisConfiguration; +import io.dataease.dto.datasource.JdbcConfiguration; +import io.dataease.dto.datasource.MysqlConfiguration; import io.dataease.provider.DDLProviderImpl; import org.springframework.stereotype.Service; @@ -16,8 +21,8 @@ public class DorisDDLProvider extends DDLProviderImpl { private static final String creatTableSql = "CREATE TABLE IF NOT EXISTS `TABLE_NAME`" + "Column_Fields" + "UNIQUE KEY(dataease_uuid)\n" + - "DISTRIBUTED BY HASH(dataease_uuid) BUCKETS 10\n" + - "PROPERTIES(\"replication_num\" = \"1\");"; + "DISTRIBUTED BY HASH(dataease_uuid) BUCKETS BUCKETS_NUM\n" + + "PROPERTIES(\"replication_num\" = \"ReplicationNum\");"; @Override public String createView(String name, String viewSQL) { @@ -41,9 +46,12 @@ public class DorisDDLProvider extends DDLProviderImpl { } @Override - public String createTableSql(String tableName, List datasetTableFields) { + public String createTableSql(String tableName, List datasetTableFields, Datasource engine) { + DorisConfiguration dorisConfiguration = new Gson().fromJson(engine.getConfiguration(), DorisConfiguration.class); String dorisTableColumnSql = createDorisTableColumnSql(datasetTableFields); - return creatTableSql.replace("TABLE_NAME", tableName).replace("Column_Fields", dorisTableColumnSql); + return creatTableSql.replace("TABLE_NAME", tableName).replace("Column_Fields", dorisTableColumnSql) + .replace("BUCKETS_NUM", dorisConfiguration.getBucketNum().toString()) + .replace("ReplicationNum", dorisConfiguration.getReplicationNum().toString()); } private String createDorisTableColumnSql(final List datasetTableFields) { diff --git a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java index 91ba3ccf97..a920e7d01f 100644 --- a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java +++ b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java @@ -1,6 +1,7 @@ package io.dataease.provider.engine.mysql; import io.dataease.base.domain.DatasetTableField; +import io.dataease.base.domain.Datasource; import io.dataease.commons.utils.TableUtils; import io.dataease.provider.DDLProviderImpl; import org.springframework.stereotype.Service; @@ -43,7 +44,7 @@ public class MysqlDDLProvider extends DDLProviderImpl { } @Override - public String createTableSql(String tableName, List datasetTableFields) { + public String createTableSql(String tableName, List datasetTableFields, Datasource engine) { String dorisTableColumnSql = createDorisTableColumnSql(datasetTableFields); return creatTableSql.replace("TABLE_NAME", tableName).replace("Column_Fields", dorisTableColumnSql); } diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index 03afdf3c7e..e5f314a50f 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -605,7 +605,7 @@ public class ExtractDataService { DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(engine); DDLProvider ddlProvider = ProviderFactory.getDDLProvider(engine.getType()); - datasourceRequest.setQuery(ddlProvider.createTableSql(tableName, datasetTableFields)); + datasourceRequest.setQuery(ddlProvider.createTableSql(tableName, datasetTableFields, engine)); jdbcProvider.exec(datasourceRequest); } diff --git a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java index fca4f1f6a1..05d54cc081 100644 --- a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java +++ b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java @@ -59,6 +59,11 @@ public class DatasourceService { @DeCleaner(DePermissionType.DATASOURCE) public Datasource addDatasource(Datasource datasource) throws Exception{ + try{ + DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasource.getType()); + }catch (Exception e){ + throw e; + } checkName(datasource); long currentTimeMillis = System.currentTimeMillis(); datasource.setId(UUID.randomUUID().toString()); diff --git a/backend/src/main/java/io/dataease/service/engine/EngineService.java b/backend/src/main/java/io/dataease/service/engine/EngineService.java index 181d1acc6b..db635e721b 100644 --- a/backend/src/main/java/io/dataease/service/engine/EngineService.java +++ b/backend/src/main/java/io/dataease/service/engine/EngineService.java @@ -9,6 +9,7 @@ import io.dataease.commons.utils.BeanUtils; import io.dataease.controller.ResultHolder; import io.dataease.controller.request.datasource.DatasourceRequest; import io.dataease.dto.DatasourceDTO; +import io.dataease.listener.util.CacheUtils; import io.dataease.provider.ProviderFactory; import io.dataease.provider.datasource.DatasourceProvider; import io.dataease.service.datasource.DatasourceService; @@ -31,8 +32,6 @@ public class EngineService { private DeEngineMapper deEngineMapper; @Resource private DatasourceService datasource; - static private Datasource ds = null; - public Boolean isLocalMode(){ return env.getProperty("engine_mode", "local").equalsIgnoreCase("local"); @@ -51,7 +50,13 @@ public class EngineService { } public DeEngine info(){ - List deEngines = deEngineMapper.selectByExampleWithBLOBs(new DeEngineExample()); + DeEngineExample deEngineExample = new DeEngineExample(); + if(isClusterMode()){ + deEngineExample.createCriteria().andTypeEqualTo("engine_doris"); + }else { + deEngineExample.createCriteria().andTypeEqualTo("engine_mysql"); + } + List deEngines = deEngineMapper.selectByExampleWithBLOBs(deEngineExample); if(CollectionUtils.isEmpty(deEngines)){ return new DeEngine(); } @@ -69,7 +74,7 @@ public class EngineService { datasourceProvider.checkStatus(datasourceRequest); return ResultHolder.success(datasource); }catch (Exception e){ - return ResultHolder.error("Datasource is invalid: " + e.getMessage()); + return ResultHolder.error("Engine is invalid: " + e.getMessage()); } } @@ -79,26 +84,23 @@ public class EngineService { deEngineMapper.insert(engine); }else { deEngineMapper.updateByPrimaryKeyWithBLOBs(engine); + datasource.handleConnectionPool(getDeEngine(), "delete"); } - datasource.handleConnectionPool(this.ds, "delete"); setDs(engine); - datasource.handleConnectionPool(this.ds, "add"); + datasource.handleConnectionPool(getDeEngine(), "add"); return ResultHolder.success(engine); } private void setDs(DeEngine engine){ - if(this.ds == null){ - this.ds = new Datasource(); - BeanUtils.copyBean(this.ds, engine); - }else { - BeanUtils.copyBean(this.ds, engine); - } + CacheUtils.put("ENGINE", "engine", engine, null, null); } public Datasource getDeEngine() throws Exception{ - if (this.ds != null) { - return this.ds; + Object catcheEngine = CacheUtils.get("ENGINE", "engine"); + if(catcheEngine != null){ + return (Datasource) catcheEngine; } + if(isLocalMode()){ JSONObject jsonObject = new JSONObject(); jsonObject.put("dataSourceType", "jdbc"); @@ -123,12 +125,7 @@ public class EngineService { } setDs(deEngines.get(0)); } -// if(isSimpleMode()){ -// -// } - - //TODO cluster mode - return this.ds; + return getDeEngine(); } diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 8907f20014..62a6c24259 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1301,6 +1301,7 @@ export default { user_name: '用户名', password: '密码', host: '主机名/IP地址', + doris_host: 'Doris 地址', port: '端口', datasource_url: '地址', please_input_datasource_url: '请输入 Elasticsearch 地址,如: http://es_host:es_port', @@ -1332,6 +1333,10 @@ export default { initial_pool_size: '初始连接数', min_pool_size: '最小连接数', max_pool_size: '最大连接数', + bucket_num: 'Bucket 数量', + replication_num: '副本数量', + please_input_bucket_num: '请输入 Bucket 数量', + please_input_replication_num: '请输入副本数量', max_idle_time: '最大空闲(秒)', acquire_increment: '增长数', connect_timeout: '连接超时(秒)', diff --git a/frontend/src/views/system/SysParam/SimpleModeSetting.vue b/frontend/src/views/system/SysParam/SimpleModeSetting.vue index 6871b83ac5..1057a2181e 100644 --- a/frontend/src/views/system/SysParam/SimpleModeSetting.vue +++ b/frontend/src/views/system/SysParam/SimpleModeSetting.vue @@ -1,6 +1,5 @@ @@ -37,13 +41,14 @@ import BasicSetting from './BasicSetting' import EmailSetting from './EmailSetting' import SimpleMode from './SimpleModeSetting' +import ClusterMode from './ClusterModeSetting' import LayoutContent from '@/components/business/LayoutContent' import PluginCom from '@/views/system/plugin/PluginCom' import { pluginLoaded } from '@/api/user' import { engineMode } from '@/api/system/engine' export default { - components: { BasicSetting, EmailSetting, LayoutContent, PluginCom, SimpleMode}, + components: { BasicSetting, EmailSetting, LayoutContent, PluginCom, SimpleMode, ClusterMode}, data() { return { activeName: 'zero',