This is an automated email from the ASF dual-hosted git repository.
caishunfeng pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new b3cc8a55b9 [feature][API]feature: add task type list and enable user
to add task type to fav (#11727)
b3cc8a55b9 is described below
commit b3cc8a55b9c77f4d7b3198a6c8e7725eb8f4ffd2
Author: Tq <[email protected]>
AuthorDate: Fri Sep 2 11:40:23 2022 +0800
[feature][API]feature: add task type list and enable user to add task type
to fav (#11727)
* feature: add task type list and enable user to add task type to fav
* make DependentExecute.java variable protected
* add standalone server fileSet
---
.../api/configuration/TaskTypeConfiguration.java | 66 +++++++++++++
.../api/controller/FavTaskController.java | 108 +++++++++++++++++++++
.../dolphinscheduler/api/dto/FavTaskDto.java | 49 ++++++++++
.../apache/dolphinscheduler/api/enums/Status.java | 7 +-
.../api/service/FavTaskService.java | 32 ++++++
.../api/service/impl/FavTaskServiceImpl.java | 66 +++++++++++++
.../src/main/resources/task-type-config.yaml | 57 +++++++++++
.../apache/dolphinscheduler/common/Constants.java | 10 ++
.../common/config/YamlPropertySourceFactory.java | 44 +++++++++
.../dolphinscheduler/dao/entity/FavTask.java | 40 ++++++++
.../dolphinscheduler/dao/mapper/FavTaskMapper.java | 34 +++++++
.../dolphinscheduler/dao/mapper/FavTaskMapper.xml | 34 +++++++
.../src/main/resources/sql/dolphinscheduler_h2.sql | 14 ++-
.../main/resources/sql/dolphinscheduler_mysql.sql | 38 +++++---
.../resources/sql/dolphinscheduler_postgresql.sql | 37 ++++---
.../dolphinscheduler-standalone-server.xml | 7 ++
16 files changed, 616 insertions(+), 27 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/configuration/TaskTypeConfiguration.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/configuration/TaskTypeConfiguration.java
new file mode 100644
index 0000000000..448f2d55b5
--- /dev/null
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/configuration/TaskTypeConfiguration.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.configuration;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.dolphinscheduler.api.dto.FavTaskDto;
+import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.config.YamlPropertySourceFactory;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import
org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.stereotype.Component;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+@Component
+@EnableConfigurationProperties
+@PropertySource(value = {"classpath:task-type-config.yaml"}, factory =
YamlPropertySourceFactory.class)
+@ConfigurationProperties(prefix = "task")
+@Getter
+@Setter
+public class TaskTypeConfiguration {
+
+ private List<String> universal;
+ private List<String> cloud;
+ private List<String> logic;
+ private List<String> dataIntegration;
+ private List<String> dataQuality;
+ private List<String> other;
+
+ private List<String> machineLearning;
+
+ public Set<FavTaskDto> getDefaultTaskTypes() {
+ Set<FavTaskDto> defaultTaskTypes = new HashSet<>();
+ if (defaultTaskTypes.size() <= 0) {
+ universal.forEach(task -> defaultTaskTypes.add(new
FavTaskDto(task, false, Constants.TYPE_UNIVERSAL)));
+ cloud.forEach(task -> defaultTaskTypes.add(new FavTaskDto(task,
false, Constants.TYPE_CLOUD)));
+ logic.forEach(task -> defaultTaskTypes.add(new FavTaskDto(task,
false, Constants.TYPE_LOGIC)));
+ dataIntegration.forEach(task -> defaultTaskTypes.add(new
FavTaskDto(task, false, Constants.TYPE_DATA_INTEGRATION)));
+ dataQuality.forEach(task -> defaultTaskTypes.add(new
FavTaskDto(task, false, Constants.TYPE_DATA_QUALITY)));
+ machineLearning.forEach(task -> defaultTaskTypes.add(new
FavTaskDto(task, false, Constants.TYPE_MACHINE_LEARNING)));
+ other.forEach(task -> defaultTaskTypes.add(new FavTaskDto(task,
false, Constants.TYPE_OTHER)));
+
+ }
+
+ return defaultTaskTypes;
+ }
+}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/FavTaskController.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/FavTaskController.java
new file mode 100644
index 0000000000..98d38373f3
--- /dev/null
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/FavTaskController.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.dolphinscheduler.api.aspect.AccessLogAnnotation;
+import org.apache.dolphinscheduler.api.dto.FavTaskDto;
+import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.exceptions.ApiException;
+import org.apache.dolphinscheduler.api.service.FavTaskService;
+import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.dao.entity.User;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+import static org.apache.dolphinscheduler.api.enums.Status.ADD_TASK_TYPE_ERROR;
+import static
org.apache.dolphinscheduler.api.enums.Status.DELETE_TASK_TYPE_ERROR;
+import static
org.apache.dolphinscheduler.api.enums.Status.LIST_TASK_TYPE_ERROR;
+
+/**
+ * fav controller
+ */
+@Api(tags = "FAVOURITE")
+@RestController
+@RequestMapping("/favourite")
+public class FavTaskController extends BaseController {
+
+ @Resource
+ private FavTaskService favTaskService;
+
+ /**
+ * get task type list
+ *
+ * @param loginUser login user
+ * @return task type list
+ */
+ @ApiOperation(value = "listTaskType", notes = "LIST_TASK_TYPE")
+ @GetMapping(value = "/taskTypes")
+ @ResponseStatus(HttpStatus.OK)
+ @ApiException(LIST_TASK_TYPE_ERROR)
+ @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+ public Result listTaskType(@ApiIgnore @RequestAttribute(value =
Constants.SESSION_USER) User loginUser) {
+ List<FavTaskDto> favTaskList =
favTaskService.getFavTaskList(loginUser);
+ return success(Status.SUCCESS.getMsg(), favTaskList);
+ }
+
+ /**
+ * delete task fav
+ *
+ * @param loginUser login user
+ * @return
+ */
+ @ApiOperation(value = "deleteTaskType", notes = "DELETE_TASK_TYPE")
+ @DeleteMapping(value = "/{taskName}")
+ @ResponseStatus(HttpStatus.OK)
+ @ApiException(DELETE_TASK_TYPE_ERROR)
+ @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+ public Result deleteFavTask(@ApiIgnore @RequestAttribute(value =
Constants.SESSION_USER) User loginUser,
+ @PathVariable("taskName") String taskName) {
+ boolean b = favTaskService.deleteFavTask(loginUser, taskName);
+ return success(b);
+ }
+
+ /**
+ * add task fav
+ *
+ * @param loginUser login user
+ * @return
+ */
+ @ApiOperation(value = "addTaskType", notes = "ADD_TASK_TYPE")
+ @PostMapping(value = "/{taskName}")
+ @ResponseStatus(HttpStatus.OK)
+ @ApiException(ADD_TASK_TYPE_ERROR)
+ @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+ public Result addFavTask(@ApiIgnore @RequestAttribute(value =
Constants.SESSION_USER) User loginUser,
+ @PathVariable("taskName") String taskName) {
+ int i = favTaskService.addFavTask(loginUser, taskName);
+ return success(i > 0);
+ }
+}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/FavTaskDto.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/FavTaskDto.java
new file mode 100644
index 0000000000..91e107b5ad
--- /dev/null
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/FavTaskDto.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@NoArgsConstructor
+@Getter
+@Setter
+@AllArgsConstructor
+public class FavTaskDto {
+
+ private String taskName;
+ private boolean isCollection;
+ private String taskType;
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof FavTaskDto) {
+ FavTaskDto favDto = (FavTaskDto) obj;
+ return this.taskName.equals(favDto.getTaskName());
+
+ }
+ return super.equals(obj);
+ }
+
+ @Override
+ public int hashCode() {
+ return super.hashCode();
+ }
+}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
index dea5e79285..a34ca157d9 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
@@ -17,11 +17,11 @@
package org.apache.dolphinscheduler.api.enums;
+import org.springframework.context.i18n.LocaleContextHolder;
+
import java.util.Locale;
import java.util.Optional;
-import org.springframework.context.i18n.LocaleContextHolder;
-
/**
* status enum // todo #4855 One category one interval
*/
@@ -222,6 +222,9 @@ public enum Status {
TASK_WITH_DEPENDENT_ERROR(10195, "task used in other tasks", "删除被其他任务引用"),
TASK_SAVEPOINT_ERROR(10196, "task savepoint error", "任务实例savepoint错误"),
TASK_STOP_ERROR(10197, "task stop error", "任务实例停止错误"),
+ LIST_TASK_TYPE_ERROR(10200, "list task type error", "查询任务类型列表错误"),
+ DELETE_TASK_TYPE_ERROR(10200, "delete task type error", "删除任务类型错误"),
+ ADD_TASK_TYPE_ERROR(10200, "add task type error", "添加任务类型错误"),
UDF_FUNCTION_NOT_EXIST(20001, "UDF function not found", "UDF函数不存在"),
UDF_FUNCTION_EXISTS(20002, "UDF function already exists", "UDF函数已存在"),
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/FavTaskService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/FavTaskService.java
new file mode 100644
index 0000000000..a6c24fdac8
--- /dev/null
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/FavTaskService.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.service;
+
+import org.apache.dolphinscheduler.api.dto.FavTaskDto;
+import org.apache.dolphinscheduler.dao.entity.User;
+
+import java.util.List;
+
+public interface FavTaskService {
+
+ List<FavTaskDto> getFavTaskList(User loginUser);
+
+ boolean deleteFavTask(User loginUser, String taskName);
+
+ int addFavTask(User loginUser, String taskName);
+}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/FavTaskServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/FavTaskServiceImpl.java
new file mode 100644
index 0000000000..fb13d548fb
--- /dev/null
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/FavTaskServiceImpl.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.service.impl;
+
+import org.apache.dolphinscheduler.api.configuration.TaskTypeConfiguration;
+import org.apache.dolphinscheduler.api.dto.FavTaskDto;
+import org.apache.dolphinscheduler.api.service.FavTaskService;
+import org.apache.dolphinscheduler.dao.entity.FavTask;
+import org.apache.dolphinscheduler.dao.entity.User;
+import org.apache.dolphinscheduler.dao.mapper.FavTaskMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+@Service
+public class FavTaskServiceImpl extends BaseServiceImpl implements
FavTaskService {
+
+ @Resource
+ private TaskTypeConfiguration taskTypeConfiguration;
+ @Resource
+ private FavTaskMapper favMapper;
+
+ @Override
+ public List<FavTaskDto> getFavTaskList(User loginUser) {
+ List<FavTaskDto> result = new ArrayList<>();
+ Set<String> userFavTaskTypes =
favMapper.getUserFavTaskTypes(loginUser.getId());
+
+ Set<FavTaskDto> defaultTaskTypes =
taskTypeConfiguration.getDefaultTaskTypes();
+ defaultTaskTypes.forEach(e -> {
+ if (userFavTaskTypes.contains(e.getTaskName())) {
+ e.setCollection(true);
+ }
+ result.add(e);
+ });
+ return result;
+ }
+
+ @Override
+ public boolean deleteFavTask(User loginUser, String taskName) {
+ return favMapper.deleteUserFavTask(loginUser.getId(), taskName);
+ }
+
+ @Override
+ public int addFavTask(User loginUser, String taskName) {
+ favMapper.deleteUserFavTask(loginUser.getId(), taskName);
+ return favMapper.insert(new FavTask(null, taskName,
loginUser.getId()));
+ }
+}
diff --git a/dolphinscheduler-api/src/main/resources/task-type-config.yaml
b/dolphinscheduler-api/src/main/resources/task-type-config.yaml
new file mode 100644
index 0000000000..0172b261a7
--- /dev/null
+++ b/dolphinscheduler-api/src/main/resources/task-type-config.yaml
@@ -0,0 +1,57 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+task:
+ universal:
+ - 'SHELL'
+ - 'PYTHON'
+ - 'PROCEDURE'
+ - 'SQL'
+ - 'SPARK'
+ - 'FLINK'
+ - 'HTTP'
+ - 'MR'
+ - 'DINKY'
+ - 'FLINK_STREAM'
+ - 'HIVECLI'
+ cloud:
+ - 'EMR'
+ - 'K8S'
+ logic:
+ - 'SUB_PROCESS'
+ - 'DEPENDENT'
+ - 'CONDITIONS'
+ - 'SWITCH'
+ - 'NEXT_LOOP'
+ - 'SURVEIL'
+ dataIntegration:
+ - 'SEATUNNEL'
+ - 'DATAX'
+ - 'SQOOP'
+ dataQuality:
+ - 'DATA_QUALITY'
+ machineLearning:
+ - 'JUPYTER'
+ - 'MLFLOW'
+ - 'OPENMLDB'
+ - 'DVC'
+ - 'SAGEMAKER'
+ - 'PYTORCH'
+ other:
+ - 'PIGEON'
+ - 'ZEPPELIN'
+ - 'CHUNJUN'
\ No newline at end of file
diff --git
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
index 6350761205..055eb54a96 100644
---
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
+++
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
@@ -845,4 +845,14 @@ public final class Constants {
public static final String SECURITY_CONFIG_TYPE_PASSWORD = "PASSWORD";
public static final String SECURITY_CONFIG_TYPE_LDAP = "LDAP";
+ /**
+ * Task Types
+ */
+ public static final String TYPE_UNIVERSAL = "Universal";
+ public static final String TYPE_DATA_INTEGRATION = "DataIntegration";
+ public static final String TYPE_CLOUD = "Cloud";
+ public static final String TYPE_LOGIC = "Logic";
+ public static final String TYPE_DATA_QUALITY = "DataQuality";
+ public static final String TYPE_OTHER = "Other";
+ public static final String TYPE_MACHINE_LEARNING = "MachineLearning";
}
diff --git
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/config/YamlPropertySourceFactory.java
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/config/YamlPropertySourceFactory.java
new file mode 100644
index 0000000000..8c9bd2fe74
--- /dev/null
+++
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/config/YamlPropertySourceFactory.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.common.config;
+
+import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
+import org.springframework.core.env.PropertiesPropertySource;
+import org.springframework.core.env.PropertySource;
+import org.springframework.core.io.support.EncodedResource;
+import org.springframework.core.io.support.PropertySourceFactory;
+
+import java.io.IOException;
+import java.util.Properties;
+
+public class YamlPropertySourceFactory implements PropertySourceFactory {
+
+ @Override
+ public PropertySource<?> createPropertySource(String name, EncodedResource
resource) throws IOException {
+ Properties propertiesFromYaml = loadYamlIntoProperties(resource);
+ String sourceName = name != null ? name :
resource.getResource().getFilename();
+ return new PropertiesPropertySource(sourceName, propertiesFromYaml);
+ }
+
+ private Properties loadYamlIntoProperties(EncodedResource resource) {
+ YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
+ factory.setResources(resource.getResource());
+ factory.afterPropertiesSet();
+ return factory.getObject();
+ }
+}
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/FavTask.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/FavTask.java
new file mode 100644
index 0000000000..3f2f858964
--- /dev/null
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/FavTask.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.dao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@NoArgsConstructor
+@Getter
+@Setter
+@AllArgsConstructor
+@TableName("t_ds_fav_task")
+public class FavTask {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+ private String taskName;
+ private int userId;
+
+}
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/FavTaskMapper.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/FavTaskMapper.java
new file mode 100644
index 0000000000..0c102ce263
--- /dev/null
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/FavTaskMapper.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.dolphinscheduler.dao.entity.FavTask;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Set;
+
+/**
+ * fav mapper interface
+ */
+public interface FavTaskMapper extends BaseMapper<FavTask> {
+
+ Set<String> getUserFavTaskTypes(@Param("userId") int userId);
+
+ boolean deleteUserFavTask(@Param("userId") int userId, @Param("taskName")
String taskName);
+}
diff --git
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/FavTaskMapper.xml
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/FavTaskMapper.xml
new file mode 100644
index 0000000000..c5da1bf7a9
--- /dev/null
+++
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/FavTaskMapper.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="org.apache.dolphinscheduler.dao.mapper.FavTaskMapper">
+
+ <select id="getUserFavTaskTypes" resultType="string">
+ select task_name
+ from t_ds_fav
+ where user_id = #{userId}
+ </select>
+
+ <delete id="deleteUserFavTask">
+ delete
+ from t_ds_fav
+ where user_id = #{userId}
+ and task_name = #{taskName}
+ </delete>
+</mapper>
diff --git
a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql
b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql
index be90dda167..0c22fe9269 100644
--- a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql
+++ b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql
@@ -1992,5 +1992,17 @@ CREATE TABLE t_ds_cluster
);
INSERT INTO `t_ds_cluster`
-(`id`,`code`,`name`,`config`,`description`,`operator`,`create_time`,`update_time`)
+(`id`, `code`, `name`, `config`, `description`, `operator`, `create_time`,
`update_time`)
VALUES (100, 0, 'ds_null_k8s', '{"k8s":"ds_null_k8s"}', 'test', 1, '2021-03-03
11:31:24.0', '2021-03-03 11:31:24.0');
+
+--
+-- Table structure for t_ds_fav
+--
+DROP TABLE IF EXISTS t_ds_fav CASCADE;
+CREATE TABLE t_ds_fav
+(
+ id bigint(20) NOT NULL AUTO_INCREMENT,
+ task_name varchar(64) NOT NULL,
+ user_id int NOT NULL,
+ PRIMARY KEY (id)
+);
diff --git
a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql
b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql
index c877fb6fef..3ff21b1c6a 100644
--- a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql
+++ b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql
@@ -1955,16 +1955,30 @@ CREATE TABLE t_ds_alert_send_status (
-- Table structure for t_ds_cluster
-- ----------------------------
DROP TABLE IF EXISTS `t_ds_cluster`;
-CREATE TABLE `t_ds_cluster` (
- `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
- `code` bigint(20) DEFAULT NULL COMMENT 'encoding',
- `name` varchar(100) NOT NULL COMMENT 'cluster name',
- `config` text NULL DEFAULT NULL COMMENT 'this config contains many cluster
variables config',
- `description` text NULL DEFAULT NULL COMMENT 'the details',
- `operator` int(11) DEFAULT NULL COMMENT 'operator user id',
- `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
- `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `cluster_name_unique` (`name`),
- UNIQUE KEY `cluster_code_unique` (`code`)
+CREATE TABLE `t_ds_cluster`(
+ `id` bigint(11) NOT NULL
AUTO_INCREMENT COMMENT 'id',
+ `code` bigint(20) DEFAULT NULL COMMENT
'encoding',
+ `name` varchar(100) NOT NULL COMMENT
'cluster name',
+ `config` text NULL DEFAULT NULL COMMENT
'this config contains many cluster variables config',
+ `description` text NULL DEFAULT NULL COMMENT
'the details',
+ `operator` int(11) DEFAULT NULL COMMENT
'operator user id',
+ `create_time` timestamp NULL DEFAULT
CURRENT_TIMESTAMP,
+ `update_time` timestamp NULL DEFAULT
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `cluster_name_unique` (`name`),
+ UNIQUE KEY `cluster_code_unique` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for t_ds_fav_task
+-- ----------------------------
+DROP TABLE IF EXISTS `t_ds_fav_task`;
+CREATE TABLE `t_ds_fav_task`
+(
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'favorite task id',
+ `task_name` varchar(64) NOT NULL COMMENT 'favorite task name',
+ `user_id` int NOT NULL COMMENT 'user id',
+ PRIMARY KEY (`id`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 1
+ DEFAULT CHARSET = utf8;
diff --git
a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql
b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql
index 2c50e1d7de..481b3e3e1e 100644
---
a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql
+++
b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql
@@ -1937,16 +1937,29 @@ CREATE TABLE t_ds_alert_send_status (
--
DROP TABLE IF EXISTS t_ds_cluster;
-CREATE TABLE t_ds_cluster (
- id serial NOT NULL,
- code bigint NOT NULL,
- name varchar(100) DEFAULT NULL,
- config text DEFAULT NULL,
- description text,
- operator int DEFAULT NULL,
- create_time timestamp DEFAULT NULL,
- update_time timestamp DEFAULT NULL,
- PRIMARY KEY (id),
- CONSTRAINT cluster_name_unique UNIQUE (name),
- CONSTRAINT cluster_code_unique UNIQUE (code)
+CREATE TABLE t_ds_cluster(
+ id serial NOT NULL,
+ code bigint NOT NULL,
+ name varchar(100) DEFAULT NULL,
+ config text DEFAULT NULL,
+ description text,
+ operator int DEFAULT NULL,
+ create_time timestamp DEFAULT NULL,
+ update_time timestamp DEFAULT NULL,
+ PRIMARY KEY (id),
+ CONSTRAINT cluster_name_unique UNIQUE (name),
+ CONSTRAINT cluster_code_unique UNIQUE (code)
+);
+
+--
+-- Table structure for t_ds_fav
+--
+
+DROP TABLE IF EXISTS t_ds_fav;
+CREATE TABLE t_ds_fav
+(
+ id serial NOT NULL,
+ task_name varchar(64) NOT NULL,
+ user_id int NOT NULL,
+ PRIMARY KEY (id)
);
diff --git
a/dolphinscheduler-standalone-server/src/main/assembly/dolphinscheduler-standalone-server.xml
b/dolphinscheduler-standalone-server/src/main/assembly/dolphinscheduler-standalone-server.xml
index 3857cf75fe..14a38289f8 100644
---
a/dolphinscheduler-standalone-server/src/main/assembly/dolphinscheduler-standalone-server.xml
+++
b/dolphinscheduler-standalone-server/src/main/assembly/dolphinscheduler-standalone-server.xml
@@ -86,6 +86,13 @@
</includes>
<outputDirectory>conf</outputDirectory>
</fileSet>
+ <fileSet>
+
<directory>${basedir}/../dolphinscheduler-api/src/main/resources</directory>
+ <includes>
+ <include>task-type-config.yaml</include>
+ </includes>
+ <outputDirectory>conf</outputDirectory>
+ </fileSet>
<fileSet>
<directory>${basedir}/../dolphinscheduler-ui/dist</directory>
<outputDirectory>./ui</outputDirectory>