[Improve] mybatis-plus updateStrategy improvements (#3615)

* [improve] update global db update-strategy

* [improve] remove all @TableField(updateStrategy = FieldStrategy.IGNORED)
diff --git a/.licenserc.yaml b/.licenserc.yaml
index 1c66522..9313bb6 100644
--- a/.licenserc.yaml
+++ b/.licenserc.yaml
@@ -171,3 +171,5 @@
       license: Eclipse Public License 2.0
     - name: org.slf4j:slf4j-api
       license: MIT License
+    - name: cn.hutool:hutool-core
+      license: MulanPSL-2.0
diff --git a/dist-material/release-docs/LICENSE b/dist-material/release-docs/LICENSE
index d8d8630..4936762 100644
--- a/dist-material/release-docs/LICENSE
+++ b/dist-material/release-docs/LICENSE
@@ -733,6 +733,13 @@
     https://mvnrepository.com/artifact/com.github.scribejava/scribejava-apis/7.1.1 MIT
     https://mvnrepository.com/artifact/com.github.scribejava/scribejava-core/7.1.1 MIT
 
+========================================================================
+MulanPSL-2.0 licenses
+========================================================================
+The following components are provided under the MulanPSL-2.0 License. See project link for details.
+The text of each license is also included in licenses/LICENSE-[project].txt.
+
+    https://mvnrepository.com/artifact/cn.hutool/hutool-core/5.8.26 MulanPSL-2.0
 
 ========================================================================
 Public Domain licenses
diff --git a/dist-material/release-docs/licenses/license-cn.hutool-hutool-core.txt b/dist-material/release-docs/licenses/license-cn.hutool-hutool-core.txt
new file mode 100644
index 0000000..52f1fbc
--- /dev/null
+++ b/dist-material/release-docs/licenses/license-cn.hutool-hutool-core.txt
@@ -0,0 +1 @@
+License: {Name: MulanPSL-2.0, URL: http://license.coscl.org.cn/MulanPSL2, Distribution: repo, Comments: , }
diff --git a/streampark-console/streampark-console-service/pom.xml b/streampark-console/streampark-console-service/pom.xml
index f6b48a6..694ecb1 100644
--- a/streampark-console/streampark-console-service/pom.xml
+++ b/streampark-console/streampark-console-service/pom.xml
@@ -44,6 +44,7 @@
         <knife4j-openapi3.version>4.0.0</knife4j-openapi3.version>
         <springdoc-openapi-ui.version>1.6.9</springdoc-openapi-ui.version>
         <commons-compress.version>1.21</commons-compress.version>
+        <hutool.version>5.8.27</hutool.version>
         <javax-mail.version>1.4.7</javax-mail.version>
         <shiro.version>1.10.0</shiro.version>
         <jsch.version>0.2.11</jsch.version>
@@ -258,6 +259,13 @@
             <artifactId>commons-lang3</artifactId>
         </dependency>
 
+        <!-- hutool -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-core</artifactId>
+            <version>${hutool.version}</version>
+        </dependency>
+
         <!-- h2 -->
         <dependency>
             <groupId>com.h2database</groupId>
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/MybatisConfig.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/MybatisConfig.java
index df9b4f3..f6c193c 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/MybatisConfig.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/MybatisConfig.java
@@ -22,6 +22,7 @@
 
 import org.apache.ibatis.type.JdbcType;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer;
 import com.baomidou.mybatisplus.core.MybatisConfiguration;
@@ -85,6 +86,7 @@
       GlobalConfig globalConfig = GlobalConfigUtils.getGlobalConfig(mybatisConfiguration);
       GlobalConfig.DbConfig dbConfig = globalConfig.getDbConfig();
       dbConfig.setIdType(IdType.AUTO);
+      dbConfig.setUpdateStrategy(FieldStrategy.IGNORED);
       // close mybatis-plus banner
       globalConfig.setBanner(false);
       properties.setGlobalConfig(globalConfig);
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Application.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Application.java
index 198cfe1..2349fc0 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Application.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Application.java
@@ -40,7 +40,6 @@
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 
-import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -80,14 +79,11 @@
   /** The name of the frontend and program displayed in yarn */
   private String jobName;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String appId;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String jobId;
 
   /** The address of the jobmanager, that is, the direct access address of the Flink web UI */
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String jobManagerUrl;
 
   /** flink version */
@@ -128,7 +124,6 @@
   private Boolean build;
 
   /** max restart retries after job failed */
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private Integer restartSize;
 
   /** has restart count */
@@ -137,7 +132,6 @@
   private Integer optionState;
 
   /** alert id */
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private Long alertId;
 
   private String args;
@@ -146,7 +140,6 @@
 
   private String options;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String hotParams;
 
   private Integer resolveOrder;
@@ -169,7 +162,6 @@
 
   private Date startTime;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private Date endTime;
 
   private Long duration;
@@ -197,7 +189,6 @@
   private Integer totalTask;
 
   /** the cluster id bound to the task in remote mode */
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private Long flinkClusterId;
 
   private String description;
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/ApplicationConfig.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/ApplicationConfig.java
index 5a096fb..58fc0ca 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/ApplicationConfig.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/ApplicationConfig.java
@@ -24,9 +24,7 @@
 
 import org.apache.commons.collections.MapUtils;
 
-import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -59,7 +57,6 @@
   /** default version: 1 */
   private Integer version = 1;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String content;
 
   private Date createTime;
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlinkCluster.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlinkCluster.java
index 6763744..d2a80b3 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlinkCluster.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlinkCluster.java
@@ -31,9 +31,7 @@
 import org.apache.flink.configuration.CoreOptions;
 import org.apache.hc.client5.http.config.RequestConfig;
 
-import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
@@ -59,10 +57,8 @@
   @TableId(type = IdType.AUTO)
   private Long id;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String address;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String jobManagerUrl;
 
   private String clusterId;
@@ -98,7 +94,6 @@
 
   private Integer resolveOrder;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String exception;
 
   private Integer clusterState;
@@ -107,10 +102,8 @@
 
   private Date startTime;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private Date endTime;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private Long alertId;
 
   private transient Integer allJobs = 0;
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Project.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Project.java
index 40439be..d921830 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Project.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Project.java
@@ -30,9 +30,7 @@
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 
-import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -68,13 +66,10 @@
 
   private Date lastBuild;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String userName;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String password;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String prvkeyPath;
 
   /** No salt value is returned */
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Setting.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Setting.java
index edd8659..fb76e49 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Setting.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Setting.java
@@ -17,9 +17,7 @@
 
 package org.apache.streampark.console.core.entity;
 
-import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -39,7 +37,6 @@
   @TableId(type = IdType.INPUT)
   private String settingKey;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String settingValue;
 
   private Integer type;
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/YarnQueue.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/YarnQueue.java
index bb81b66..55c85da 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/YarnQueue.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/YarnQueue.java
@@ -41,7 +41,6 @@
   /** yarn queue and label in format {queue} or {queue@label1} or {queue@label1,label2}. */
   private String queueLabel;
 
-  @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String description;
 
   private Date createTime;
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/alert/impl/AlertConfigServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/alert/impl/AlertConfigServiceImpl.java
index 6d889a7..c25ce5e 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/alert/impl/AlertConfigServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/alert/impl/AlertConfigServiceImpl.java
@@ -26,6 +26,7 @@
 import org.apache.streampark.console.core.mapper.AlertConfigMapper;
 import org.apache.streampark.console.core.service.alert.AlertConfigService;
 import org.apache.streampark.console.core.service.application.ApplicationInfoService;
+import org.apache.streampark.console.core.utils.BeanUtil;
 
 import org.apache.commons.collections.CollectionUtils;
 
@@ -74,6 +75,16 @@
   }
 
   @Override
+  public boolean updateById(AlertConfig entity) {
+    AlertConfig alertConfig = baseMapper.selectById(entity.getId());
+    if (alertConfig == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, alertConfig, AlertConfig::getId, AlertConfig::getCreateTime);
+    return super.updateById(alertConfig);
+  }
+
+  @Override
   public boolean removeById(Long id) throws AlertException {
     long count =
         applicationInfoService.count(
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/application/impl/ApplicationActionServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/application/impl/ApplicationActionServiceImpl.java
index 60047f4..0fbbb51 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/application/impl/ApplicationActionServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/application/impl/ApplicationActionServiceImpl.java
@@ -65,6 +65,7 @@
 import org.apache.streampark.console.core.service.application.ApplicationActionService;
 import org.apache.streampark.console.core.service.application.ApplicationInfoService;
 import org.apache.streampark.console.core.service.application.ApplicationManageService;
+import org.apache.streampark.console.core.utils.BeanUtil;
 import org.apache.streampark.console.core.utils.FlinkK8sDataTypeConverterStub;
 import org.apache.streampark.console.core.watcher.FlinkAppHttpWatcher;
 import org.apache.streampark.console.core.watcher.FlinkClusterWatcher;
@@ -251,7 +252,7 @@
     }
 
     application.setOptionTime(new Date());
-    this.baseMapper.updateById(application);
+    updateById(application);
 
     Long userId = commonService.getUserId();
     if (!application.getUserId().equals(userId)) {
@@ -848,4 +849,19 @@
         flinkClusterWatcher.getClusterState(flinkCluster) == ClusterState.RUNNING,
         "[StreamPark] The flink cluster not running, please start it");
   }
+
+  @Override
+  public boolean updateById(Application application) {
+    Application app = getById(application.getId());
+    BeanUtil.copyIgnoreNull(application, app, Application::getId, Application::getCreateTime);
+    app.setAppId(application.getAppId());
+    app.setJobId(application.getJobId());
+    app.setJobManagerUrl(application.getJobManagerUrl());
+    app.setRestartSize(application.getRestartSize());
+    app.setAlertId(application.getAlertId());
+    app.setEndTime(application.getEndTime());
+    app.setHotParams(application.getHotParams());
+    app.setFlinkClusterId(application.getFlinkClusterId());
+    return super.updateById(app);
+  }
 }
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/application/impl/ApplicationManageServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/application/impl/ApplicationManageServiceImpl.java
index 0fce782..1af2784 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/application/impl/ApplicationManageServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/application/impl/ApplicationManageServiceImpl.java
@@ -54,6 +54,7 @@
 import org.apache.streampark.console.core.service.SavePointService;
 import org.apache.streampark.console.core.service.SettingService;
 import org.apache.streampark.console.core.service.YarnQueueService;
+import org.apache.streampark.console.core.service.application.ApplicationActionService;
 import org.apache.streampark.console.core.service.application.ApplicationManageService;
 import org.apache.streampark.console.core.utils.FlinkK8sDataTypeConverterStub;
 import org.apache.streampark.console.core.watcher.FlinkAppHttpWatcher;
@@ -139,6 +140,8 @@
 
   @Autowired private FlinkClusterService flinkClusterService;
 
+  @Autowired private ApplicationActionService applicationActionService;
+
   @PostConstruct
   public void resetOptionState() {
     this.baseMapper.resetOptionState();
@@ -609,7 +612,7 @@
       application.setJar(appParam.getJar());
       application.setMainClass(appParam.getMainClass());
     }
-    this.updateById(application);
+    applicationActionService.updateById(application);
     return true;
   }
 
@@ -682,7 +685,7 @@
         }
       }
     }
-    this.updateById(application);
+    applicationActionService.updateById(application);
     this.configService.update(appParam, application.isRunning());
   }
 
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
index 3370e66..ea04f7b 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
@@ -59,6 +59,7 @@
 import org.apache.streampark.console.core.service.application.ApplicationActionService;
 import org.apache.streampark.console.core.service.application.ApplicationInfoService;
 import org.apache.streampark.console.core.service.application.ApplicationManageService;
+import org.apache.streampark.console.core.utils.BeanUtil;
 import org.apache.streampark.console.core.watcher.FlinkAppHttpWatcher;
 import org.apache.streampark.flink.packer.docker.DockerConf;
 import org.apache.streampark.flink.packer.maven.Artifact;
@@ -648,6 +649,16 @@
     return updateById(pipe);
   }
 
+  @Override
+  public boolean updateById(AppBuildPipeline entity) {
+    AppBuildPipeline appBuildPipeline = baseMapper.selectById(entity.getAppId());
+    if (appBuildPipeline == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, appBuildPipeline, AppBuildPipeline::getAppId);
+    return super.updateById(appBuildPipeline);
+  }
+
   /**
    * Check if the jar exists, and upload a copy if it does not exist
    *
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ExternalLinkServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ExternalLinkServiceImpl.java
index ebf979c..62ac4c8 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ExternalLinkServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ExternalLinkServiceImpl.java
@@ -24,6 +24,7 @@
 import org.apache.streampark.console.core.mapper.ExternalLinkMapper;
 import org.apache.streampark.console.core.service.ExternalLinkService;
 import org.apache.streampark.console.core.service.application.ApplicationManageService;
+import org.apache.streampark.console.core.utils.BeanUtil;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -65,8 +66,18 @@
     if (!this.check(externalLink)) {
       return;
     }
-    externalLink.setModifyTime(new Date());
-    baseMapper.updateById(externalLink);
+    updateById(externalLink);
+  }
+
+  @Override
+  public boolean updateById(ExternalLink externalLink) {
+    ExternalLink link = baseMapper.selectById(externalLink.getId());
+    if (link == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(externalLink, link, ExternalLink::getId, ExternalLink::getCreateTime);
+    link.setModifyTime(new Date());
+    return super.updateById(link);
   }
 
   @Override
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkClusterServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkClusterServiceImpl.java
index ea80ed2..b3af94b 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkClusterServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkClusterServiceImpl.java
@@ -31,6 +31,7 @@
 import org.apache.streampark.console.core.service.FlinkEnvService;
 import org.apache.streampark.console.core.service.YarnQueueService;
 import org.apache.streampark.console.core.service.application.ApplicationInfoService;
+import org.apache.streampark.console.core.utils.BeanUtil;
 import org.apache.streampark.console.core.watcher.FlinkClusterWatcher;
 import org.apache.streampark.console.core.watcher.FlinkK8sObserverStub;
 import org.apache.streampark.flink.client.FlinkClient;
@@ -226,6 +227,21 @@
     updateById(flinkCluster);
   }
 
+  @Override
+  public boolean updateById(FlinkCluster entity) {
+    FlinkCluster flinkCluster = baseMapper.selectById(entity.getId());
+    if (flinkCluster == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, flinkCluster, FlinkCluster::getId, FlinkCluster::getCreateTime);
+    flinkCluster.setAddress(entity.getAddress());
+    flinkCluster.setJobManagerUrl(entity.getJobManagerUrl());
+    flinkCluster.setException(entity.getException());
+    flinkCluster.setEndTime(entity.getEndTime());
+    flinkCluster.setAlertId(entity.getAlertId());
+    return super.updateById(flinkCluster);
+  }
+
   private void updateFlinkClusterForNonRemoteModes(
       FlinkCluster paramOfCluster, FlinkCluster flinkCluster) {
     flinkCluster.setClusterId(paramOfCluster.getClusterId());
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkEnvServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkEnvServiceImpl.java
index 17f41f5..dcb3c80 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkEnvServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkEnvServiceImpl.java
@@ -24,6 +24,7 @@
 import org.apache.streampark.console.core.service.FlinkClusterService;
 import org.apache.streampark.console.core.service.FlinkEnvService;
 import org.apache.streampark.console.core.service.application.ApplicationInfoService;
+import org.apache.streampark.console.core.utils.BeanUtil;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -154,6 +155,16 @@
     checkOrElseAlert(flinkEnv);
   }
 
+  @Override
+  public boolean updateById(FlinkEnv entity) {
+    FlinkEnv flinkEnv = baseMapper.selectById(entity.getId());
+    if (flinkEnv == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, flinkEnv, FlinkEnv::getId, FlinkEnv::getCreateTime);
+    return super.updateById(flinkEnv);
+  }
+
   private void checkOrElseAlert(FlinkEnv flinkEnv) {
 
     // 1.check exists
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ProjectServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ProjectServiceImpl.java
index 13f5a13..bb721d0 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ProjectServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ProjectServiceImpl.java
@@ -43,6 +43,7 @@
 import org.apache.streampark.console.core.service.ProjectService;
 import org.apache.streampark.console.core.service.application.ApplicationManageService;
 import org.apache.streampark.console.core.task.ProjectBuildTask;
+import org.apache.streampark.console.core.utils.BeanUtil;
 import org.apache.streampark.console.core.watcher.FlinkAppHttpWatcher;
 
 import org.apache.commons.lang3.StringUtils;
@@ -172,10 +173,23 @@
             });
       }
     }
-    baseMapper.updateById(project);
+    updateById(project);
     return true;
   }
 
+  @Override
+  public boolean updateById(Project entity) {
+    Project project = baseMapper.selectById(entity.getId());
+    if (project == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, project, Project::getId, Project::getCreateTime);
+    project.setUserName(entity.getUserName());
+    project.setPassword(entity.getPassword());
+    project.setPrvkeyPath(entity.getPrvkeyPath());
+    return super.updateById(project);
+  }
+
   private static void updateInternal(Project projectParam, Project project) {
     project.setName(projectParam.getName());
     project.setUrl(projectParam.getUrl());
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ResourceServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ResourceServiceImpl.java
index f2f2ef3..4fc7324 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ResourceServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ResourceServiceImpl.java
@@ -41,6 +41,7 @@
 import org.apache.streampark.console.core.service.FlinkSqlService;
 import org.apache.streampark.console.core.service.ResourceService;
 import org.apache.streampark.console.core.service.application.ApplicationManageService;
+import org.apache.streampark.console.core.utils.BeanUtil;
 import org.apache.streampark.flink.packer.maven.Artifact;
 import org.apache.streampark.flink.packer.maven.MavenTool;
 
@@ -209,7 +210,17 @@
     }
 
     findResource.setDescription(resource.getDescription());
-    baseMapper.updateById(findResource);
+    updateById(findResource);
+  }
+
+  @Override
+  public boolean updateById(Resource entity) {
+    Resource resource = baseMapper.selectById(entity.getId());
+    if (resource == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, resource, Resource::getId, Resource::getCreateTime);
+    return super.updateById(resource);
   }
 
   @Override
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/SavePointServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/SavePointServiceImpl.java
index c973be1..9aba293 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/SavePointServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/SavePointServiceImpl.java
@@ -40,6 +40,7 @@
 import org.apache.streampark.console.core.service.FlinkClusterService;
 import org.apache.streampark.console.core.service.FlinkEnvService;
 import org.apache.streampark.console.core.service.SavePointService;
+import org.apache.streampark.console.core.service.application.ApplicationActionService;
 import org.apache.streampark.console.core.service.application.ApplicationManageService;
 import org.apache.streampark.console.core.watcher.FlinkAppHttpWatcher;
 import org.apache.streampark.flink.client.FlinkClient;
@@ -93,6 +94,8 @@
 
   @Autowired private ApplicationManageService applicationManageService;
 
+  @Autowired private ApplicationActionService applicationActionService;
+
   @Autowired private ApplicationConfigService configService;
 
   @Autowired private FlinkClusterService flinkClusterService;
@@ -167,7 +170,7 @@
 
     application.setOptionState(OptionStateEnum.SAVEPOINTING.getValue());
     application.setOptionTime(new Date());
-    this.applicationManageService.updateById(application);
+    this.applicationActionService.updateById(application);
     flinkAppHttpWatcher.init();
 
     FlinkEnv flinkEnv = flinkEnvService.getById(application.getVersionId());
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/VariableServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/VariableServiceImpl.java
index 928f79f..eb9b8eb 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/VariableServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/VariableServiceImpl.java
@@ -30,6 +30,7 @@
 import org.apache.streampark.console.core.service.FlinkSqlService;
 import org.apache.streampark.console.core.service.VariableService;
 import org.apache.streampark.console.core.service.application.ApplicationManageService;
+import org.apache.streampark.console.core.utils.BeanUtil;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -125,7 +126,7 @@
     ApiAlertException.throwIfFalse(
         findVariable.getVariableCode().equals(variable.getVariableCode()),
         "Sorry, the variable code cannot be updated.");
-    this.baseMapper.updateById(variable);
+    updateById(variable);
     // endregion
 
     // set Application's field release to NEED_RESTART
@@ -260,4 +261,17 @@
   public boolean existsByTeamId(Long teamId) {
     return this.baseMapper.existsByTeamId(teamId);
   }
+
+  @Override
+  public boolean updateById(Variable entity) {
+    Variable variable = this.baseMapper.selectById(entity.getId());
+    if (variable == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, variable, Variable::getId, Variable::getCreateTime);
+    variable.setCreatorId(entity.getCreatorId());
+    variable.setTeamId(entity.getTeamId());
+    variable.setDesensitization(entity.getDesensitization());
+    return super.updateById(variable);
+  }
 }
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/YarnQueueServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/YarnQueueServiceImpl.java
index 66235ea..3dd0bcf 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/YarnQueueServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/YarnQueueServiceImpl.java
@@ -31,6 +31,7 @@
 import org.apache.streampark.console.core.service.FlinkClusterService;
 import org.apache.streampark.console.core.service.YarnQueueService;
 import org.apache.streampark.console.core.service.application.ApplicationManageService;
+import org.apache.streampark.console.core.utils.BeanUtil;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -158,6 +159,17 @@
   }
 
   @Override
+  public boolean updateById(YarnQueue entity) {
+    YarnQueue yarnQueue = baseMapper.selectById(entity.getId());
+    if (yarnQueue == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, yarnQueue, YarnQueue::getId, YarnQueue::getCreateTime);
+    yarnQueue.setDescription(entity.getDescription());
+    return super.updateById(yarnQueue);
+  }
+
+  @Override
   public void remove(YarnQueue yarnQueue) {
     YarnQueue queueFromDB = getYarnQueueByIdWithPreconditions(yarnQueue);
 
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/utils/BeanUtil.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/utils/BeanUtil.java
new file mode 100644
index 0000000..23ba8fe
--- /dev/null
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/utils/BeanUtil.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.streampark.console.core.utils;
+
+import cn.hutool.core.bean.copier.CopyOptions;
+import cn.hutool.core.lang.func.Func1;
+
+/** Util class for bean */
+public class BeanUtil {
+
+  /**
+   * bean copy ignore null field
+   *
+   * @param source the source object for copy
+   * @param target the target object for copy
+   */
+  @SafeVarargs
+  public static <P, R> void copyIgnoreNull(
+      Object source, Object target, Func1<P, R>... ignoreProperties) {
+    cn.hutool.core.bean.BeanUtil.copyProperties(
+        source,
+        target,
+        CopyOptions.create().ignoreNullValue().setIgnoreProperties(ignoreProperties));
+  }
+}
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/AccessTokenServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/AccessTokenServiceImpl.java
index 3b98228..d7846d3 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/AccessTokenServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/AccessTokenServiceImpl.java
@@ -23,6 +23,7 @@
 import org.apache.streampark.console.base.domain.RestResponse;
 import org.apache.streampark.console.base.mybatis.pager.MybatisPager;
 import org.apache.streampark.console.base.util.WebUtils;
+import org.apache.streampark.console.core.utils.BeanUtil;
 import org.apache.streampark.console.system.authentication.JWTToken;
 import org.apache.streampark.console.system.authentication.JWTUtil;
 import org.apache.streampark.console.system.entity.AccessToken;
@@ -116,14 +117,22 @@
             ? AccessToken.STATUS_DISABLE
             : AccessToken.STATUS_ENABLE;
 
-    AccessToken updateObj = new AccessToken();
-    updateObj.setStatus(status);
-    updateObj.setId(tokenId);
-    return RestResponse.success(this.updateById(updateObj));
+    tokenInfo.setStatus(status);
+    return RestResponse.success(this.updateById(tokenInfo));
   }
 
   @Override
   public AccessToken getByUserId(Long userId) {
     return baseMapper.selectByUserId(userId);
   }
+
+  @Override
+  public boolean updateById(AccessToken entity) {
+    AccessToken accessToken = baseMapper.selectById(entity.getId());
+    if (accessToken == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, accessToken, AccessToken::getId, AccessToken::getCreateTime);
+    return super.updateById(accessToken);
+  }
 }
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MemberServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MemberServiceImpl.java
index a03c74e..d1830cd 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MemberServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MemberServiceImpl.java
@@ -21,6 +21,7 @@
 import org.apache.streampark.console.base.domain.RestRequest;
 import org.apache.streampark.console.base.exception.ApiAlertException;
 import org.apache.streampark.console.base.mybatis.pager.MybatisPager;
+import org.apache.streampark.console.core.utils.BeanUtil;
 import org.apache.streampark.console.system.entity.Member;
 import org.apache.streampark.console.system.entity.Team;
 import org.apache.streampark.console.system.entity.User;
@@ -161,4 +162,14 @@
     oldMember.setRoleId(member.getRoleId());
     updateById(oldMember);
   }
+
+  @Override
+  public boolean updateById(Member entity) {
+    Member member = baseMapper.selectById(entity.getId());
+    if (member == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, member, Member::getId, Member::getCreateTime);
+    return super.updateById(member);
+  }
 }
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/RoleServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/RoleServiceImpl.java
index ed272fb..ae6e808 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/RoleServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/RoleServiceImpl.java
@@ -21,6 +21,7 @@
 import org.apache.streampark.console.base.domain.RestRequest;
 import org.apache.streampark.console.base.exception.ApiAlertException;
 import org.apache.streampark.console.base.mybatis.pager.MybatisPager;
+import org.apache.streampark.console.core.utils.BeanUtil;
 import org.apache.streampark.console.system.entity.Role;
 import org.apache.streampark.console.system.entity.RoleMenu;
 import org.apache.streampark.console.system.mapper.RoleMapper;
@@ -102,7 +103,7 @@
   @Override
   public void updateRole(Role role) {
     role.setModifyTime(new Date());
-    baseMapper.updateById(role);
+    updateById(role);
     LambdaQueryWrapper<RoleMenu> queryWrapper =
         new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, role.getRoleId());
     roleMenuMapper.delete(queryWrapper);
@@ -126,4 +127,14 @@
               this.roleMenuMapper.insert(rm);
             });
   }
+
+  @Override
+  public boolean updateById(Role entity) {
+    Role role = baseMapper.selectById(entity.getRoleId());
+    if (role == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, role, Role::getRoleId, Role::getCreateTime);
+    return super.updateById(role);
+  }
 }
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/TeamServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/TeamServiceImpl.java
index fea8bb8..5cc27fb 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/TeamServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/TeamServiceImpl.java
@@ -25,6 +25,7 @@
 import org.apache.streampark.console.core.service.ProjectService;
 import org.apache.streampark.console.core.service.VariableService;
 import org.apache.streampark.console.core.service.application.ApplicationInfoService;
+import org.apache.streampark.console.core.utils.BeanUtil;
 import org.apache.streampark.console.system.entity.Team;
 import org.apache.streampark.console.system.entity.User;
 import org.apache.streampark.console.system.mapper.TeamMapper;
@@ -135,6 +136,16 @@
   }
 
   @Override
+  public boolean updateById(Team entity) {
+    Team team = baseMapper.selectById(entity.getId());
+    if (team == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, team, Team::getId, Team::getCreateTime);
+    return super.updateById(team);
+  }
+
+  @Override
   public List<Team> listByUserId(Long userId) {
     User user =
         Optional.ofNullable(userService.getById(userId))
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
index 8ce2516..c63b109 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
@@ -31,6 +31,7 @@
 import org.apache.streampark.console.core.service.ResourceService;
 import org.apache.streampark.console.core.service.application.ApplicationInfoService;
 import org.apache.streampark.console.core.service.application.ApplicationManageService;
+import org.apache.streampark.console.core.utils.BeanUtil;
 import org.apache.streampark.console.system.authentication.JWTToken;
 import org.apache.streampark.console.system.authentication.JWTUtil;
 import org.apache.streampark.console.system.entity.Team;
@@ -136,6 +137,16 @@
     return RestResponse.success();
   }
 
+  @Override
+  public boolean updateById(User entity) {
+    User user = getById(entity.getUserId());
+    if (user == null) {
+      return false;
+    }
+    BeanUtil.copyIgnoreNull(entity, user, User::getUserId, User::getCreateTime);
+    return super.updateById(user);
+  }
+
   private boolean needTransferResource(User existsUser, User user) {
     if (User.STATUS_LOCK.equals(existsUser.getStatus())
         || User.STATUS_VALID.equals(user.getStatus())) {
@@ -162,7 +173,7 @@
     String password = ShaHashUtils.encrypt(salt, userParam.getPassword());
     user.setSalt(salt);
     user.setPassword(password);
-    this.baseMapper.updateById(user);
+    updateById(user);
   }
 
   @Override
@@ -199,7 +210,7 @@
     User user = getById(userId);
     AssertUtils.notNull(user);
     user.setLastTeamId(teamId);
-    this.baseMapper.updateById(user);
+    updateById(user);
   }
 
   @Override
@@ -229,7 +240,7 @@
       if (teams.size() == 1) {
         Team team = teams.get(0);
         user.setLastTeamId(team.getId());
-        this.baseMapper.updateById(user);
+        updateById(user);
       }
     }
   }
diff --git a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/SavePointServiceTest.java b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/SavePointServiceTest.java
index e2851c4..ec6abbf 100644
--- a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/SavePointServiceTest.java
+++ b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/SavePointServiceTest.java
@@ -90,7 +90,7 @@
     SavePointServiceImpl savePointServiceImpl = (SavePointServiceImpl) savePointService;
     Application app = new Application();
     Long appId = 1L;
-    Long appCfgId = 1L;
+    Long appConfigId = 1L;
     app.setId(appId);
 
     // Test for non-(StreamPark job Or FlinkSQL job)
@@ -109,12 +109,13 @@
 
     // Test for (StreamPark job Or FlinkSQL job) with application config just disabled checkpoint.
     ApplicationConfig appCfg = new ApplicationConfig();
-    appCfg.setId(appCfgId);
+    appCfg.setId(appConfigId);
     appCfg.setAppId(appId);
     appCfg.setContent("state.savepoints.dir=hdfs:///test");
     appCfg.setFormat(ConfigFileTypeEnum.PROPERTIES.getValue());
     configService.save(appCfg);
     assertThat(savePointServiceImpl.getSavepointFromConfig(app)).isNull();
+    appCfg = configService.getById(appConfigId);
 
     // Test for (StreamPark job or FlinkSQL job) with application config and enabled checkpoint and
     // configured value.