Browse Source

[Feature][Server] Custom timezone - Add timezone handler unified (#8477)

* date convert of timezone

* remove @JsonFormat

* add unit test

* fix time preview in scheduler

* optimization & add env config

Co-authored-by: caishunfeng <534328519@qq.com>
3.0.0/version-upgrade
caishunfeng 3 years ago committed by GitHub
parent
commit
84f2cfec39
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java
  2. 3
      dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/resources/application.yaml
  3. 13
      dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
  4. 3
      dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/AuditDto.java
  5. 2
      dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/ScheduleParam.java
  6. 3
      dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/gantt/Task.java
  7. 2
      dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/treeview/Instance.java
  8. 8
      dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LoginHandlerInterceptor.java
  9. 4
      dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java
  10. 2
      dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java
  11. 2
      dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/Server.java
  12. 2
      dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/WorkerServerModel.java
  13. 30
      dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/thread/ThreadLocalContext.java
  14. 84
      dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
  15. 6
      dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java
  16. 6
      dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/LoggerUtils.java
  17. 2
      dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java
  18. 6
      dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/placeholder/BusinessTimeUtils.java
  19. 6
      dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/placeholder/TimePlaceholderUtils.java
  20. 21
      dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DateUtilsTest.java
  21. 23
      dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
  22. 2
      dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/placeholder/TimePlaceholderUtilsTest.java
  23. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AuditLog.java
  24. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/CycleDependency.java
  25. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DataSource.java
  26. 3
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqComparisonType.java
  27. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqExecuteResult.java
  28. 3
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleExecuteSql.java
  29. 3
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleInputEntry.java
  30. 4
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqTaskStatisticsValue.java
  31. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Environment.java
  32. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/EnvironmentWorkerGroupRelation.java
  33. 3
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ErrorCommand.java
  34. 1
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/MonitorRecord.java
  35. 4
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessAlertContent.java
  36. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java
  37. 1
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinitionLog.java
  38. 5
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java
  39. 3
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessTaskRelation.java
  40. 1
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessTaskRelationLog.java
  41. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Queue.java
  42. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Resource.java
  43. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ResourcesUser.java
  44. 4
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Schedule.java
  45. 1
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Session.java
  46. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskAlertContent.java
  47. 3
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinition.java
  48. 1
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinitionLog.java
  49. 3
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskGroup.java
  50. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskGroupQueue.java
  51. 7
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java
  52. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskMainInfo.java
  53. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskRecord.java
  54. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Tenant.java
  55. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/UDFUser.java
  56. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/UdfFunc.java
  57. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/User.java
  58. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/WorkerGroup.java
  59. 2
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/WorkerServer.java
  60. 5
      dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/Constants.java
  61. 6
      dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/utils/JsonUtils.java
  62. 8
      dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
  63. 2
      dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskResponseEvent.java
  64. 2
      dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteThread.java
  65. 2
      dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/DependentTaskProcessor.java
  66. 3
      dolphinscheduler-master/src/main/resources/application.yaml
  67. 10
      dolphinscheduler-python/src/main/java/org/apache/dolphinscheduler/server/PythonGatewayServer.java
  68. 1
      dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteAckCommand.java
  69. 3
      dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteResponseCommand.java
  70. 2
      dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/LogUtils.java
  71. 2
      dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/LogUtilsTest.java
  72. 37
      dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/json/DateJsonSerializer.java
  73. 3
      dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/queue/entity/TaskExecutionContext.java
  74. 5
      dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/task/request/TaskRequest.java
  75. 2
      dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/task/request/UdfFuncRequest.java
  76. 4
      dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/utils/JSONUtils.java
  77. 15
      dolphinscheduler-standalone-server/src/main/java/org/apache/dolphinscheduler/StandaloneServer.java
  78. 5
      dolphinscheduler-standalone-server/src/main/resources/application.yaml
  79. 2
      dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleExecuteSql.java
  80. 4
      dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleInputEntry.java
  81. 3
      dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue
  82. 7
      dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
  83. 2
      dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
  84. 3
      dolphinscheduler-worker/src/main/resources/application.yaml
  85. 1
      script/env/dolphinscheduler_env.sh

10
dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java

@ -27,6 +27,7 @@ import org.apache.dolphinscheduler.remote.config.NettyServerConfig;
import java.io.Closeable; import java.io.Closeable;
import java.util.List; import java.util.List;
import java.util.TimeZone;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -36,6 +37,7 @@ import javax.annotation.PreDestroy;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.boot.context.event.ApplicationReadyEvent;
@ -58,6 +60,9 @@ public class AlertServer implements Closeable {
@Autowired @Autowired
private AlertConfig config; private AlertConfig config;
@Value("${spring.jackson.time-zone:UTC}")
private String timezone;
public AlertServer(PluginDao pluginDao, AlertDao alertDao, AlertPluginManager alertPluginManager, AlertSender alertSender, AlertRequestProcessor alertRequestProcessor) { public AlertServer(PluginDao pluginDao, AlertDao alertDao, AlertPluginManager alertPluginManager, AlertSender alertSender, AlertRequestProcessor alertRequestProcessor) {
this.pluginDao = pluginDao; this.pluginDao = pluginDao;
this.alertDao = alertDao; this.alertDao = alertDao;
@ -70,6 +75,11 @@ public class AlertServer implements Closeable {
SpringApplication.run(AlertServer.class, args); SpringApplication.run(AlertServer.class, args);
} }
@PostConstruct
public void init() {
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
}
@EventListener @EventListener
public void start(ApplicationReadyEvent readyEvent) { public void start(ApplicationReadyEvent readyEvent) {
logger.info("Starting Alert server"); logger.info("Starting Alert server");

3
dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/resources/application.yaml

@ -18,6 +18,9 @@
spring: spring:
application: application:
name: alert-server name: alert-server
jackson:
time-zone: UTC
date-format: "yyyy-MM-dd HH:mm:ss"
main: main:
banner-mode: off banner-mode: off
datasource: datasource:

13
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java

@ -17,6 +17,12 @@
package org.apache.dolphinscheduler.api; package org.apache.dolphinscheduler.api;
import java.util.TimeZone;
import javax.annotation.PostConstruct;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.ServletComponentScan;
@ -27,8 +33,15 @@ import org.springframework.context.annotation.ComponentScan;
@ComponentScan("org.apache.dolphinscheduler") @ComponentScan("org.apache.dolphinscheduler")
public class ApiApplicationServer { public class ApiApplicationServer {
@Value("${spring.jackson.time-zone:UTC}")
private String timezone;
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(ApiApplicationServer.class); SpringApplication.run(ApiApplicationServer.class);
} }
@PostConstruct
public void run() {
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
}
} }

3
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/AuditDto.java

@ -19,8 +19,6 @@ package org.apache.dolphinscheduler.api.dto;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
public class AuditDto { public class AuditDto {
private String userName; private String userName;
@ -29,7 +27,6 @@ public class AuditDto {
private String operation; private String operation;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date time; private Date time;
private String resourceName; private String resourceName;

2
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/ScheduleParam.java

@ -26,9 +26,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
*/ */
public class ScheduleParam { public class ScheduleParam {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime; private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime; private Date endTime;
private String crontab; private String crontab;
private String timezoneId; private String timezoneId;

3
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/gantt/Task.java

@ -43,19 +43,16 @@ public class Task {
/** /**
* task execution date * task execution date
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date executionDate; private Date executionDate;
/** /**
* task iso start * task iso start
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date isoStart; private Date isoStart;
/** /**
* task iso end * task iso end
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date isoEnd; private Date isoEnd;
/** /**

2
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/treeview/Instance.java

@ -51,13 +51,11 @@ public class Instance {
/** /**
* node start time * node start time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime; private Date startTime;
/** /**
* node end time * node end time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime; private Date endTime;

8
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LoginHandlerInterceptor.java

@ -21,6 +21,7 @@ import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.security.Authenticator; import org.apache.dolphinscheduler.api.security.Authenticator;
import org.apache.dolphinscheduler.common.Constants; import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.Flag; import org.apache.dolphinscheduler.common.enums.Flag;
import org.apache.dolphinscheduler.common.thread.ThreadLocalContext;
import org.apache.dolphinscheduler.dao.entity.User; import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.UserMapper; import org.apache.dolphinscheduler.dao.mapper.UserMapper;
@ -34,6 +35,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/** /**
* login interceptor, must log in first * login interceptor, must log in first
@ -84,9 +86,13 @@ public class LoginHandlerInterceptor implements HandlerInterceptor {
logger.info(Status.USER_DISABLED.getMsg()); logger.info(Status.USER_DISABLED.getMsg());
return false; return false;
} }
request.setAttribute(Constants.SESSION_USER, user); request.setAttribute(Constants.SESSION_USER, user);
ThreadLocalContext.getTimezoneThreadLocal().set(user.getTimeZone());
return true; return true;
} }
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
ThreadLocalContext.getTimezoneThreadLocal().remove();
}
} }

4
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java

@ -562,7 +562,9 @@ public class SchedulerServiceImpl extends BaseServiceImpl implements SchedulerSe
return result; return result;
} }
List<Date> selfFireDateList = CronUtils.getSelfFireDateList(startTime, endTime, cronExpression, Constants.PREVIEW_SCHEDULE_EXECUTE_COUNT); List<Date> selfFireDateList = CronUtils.getSelfFireDateList(startTime, endTime, cronExpression, Constants.PREVIEW_SCHEDULE_EXECUTE_COUNT);
result.put(Constants.DATA_LIST, selfFireDateList.stream().map(DateUtils::dateToString)); List<String> previewDateList = new ArrayList<>();
selfFireDateList.forEach(date -> previewDateList.add(DateUtils.dateToString(date, scheduleParam.getTimezoneId())));
result.put(Constants.DATA_LIST, previewDateList);
putMsg(result, Status.SUCCESS); putMsg(result, Status.SUCCESS);
return result; return result;
} }

2
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java

@ -26,9 +26,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
* date interval class * date interval class
*/ */
public class DateInterval { public class DateInterval {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date startTime; private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date endTime; private Date endTime;
public DateInterval(Date beginTime, Date endTime) { public DateInterval(Date beginTime, Date endTime) {

2
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/Server.java

@ -54,13 +54,11 @@ public class Server {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* laster heart beat time * laster heart beat time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date lastHeartbeatTime; private Date lastHeartbeatTime;
public int getId() { public int getId() {

2
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/WorkerServerModel.java

@ -55,13 +55,11 @@ public class WorkerServerModel {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* last heart beat time * last heart beat time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date lastHeartbeatTime; private Date lastHeartbeatTime;
public int getId() { public int getId() {

30
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/thread/ThreadLocalContext.java

@ -0,0 +1,30 @@
/*
* 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.thread;
/**
* thread local context
*/
public class ThreadLocalContext {
public static final ThreadLocal<String> timezoneThreadLocal = new ThreadLocal<>();
public static ThreadLocal<String> getTimezoneThreadLocal() {
return timezoneThreadLocal;
}
}

84
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java

@ -18,6 +18,7 @@
package org.apache.dolphinscheduler.common.utils; package org.apache.dolphinscheduler.common.utils;
import org.apache.dolphinscheduler.common.Constants; import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.thread.ThreadLocalContext;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -56,7 +57,23 @@ public final class DateUtils {
* @return local datetime * @return local datetime
*/ */
private static LocalDateTime date2LocalDateTime(Date date) { private static LocalDateTime date2LocalDateTime(Date date) {
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); String timezone = ThreadLocalContext.getTimezoneThreadLocal().get();
ZoneId zoneId = ZoneId.systemDefault();
if (StringUtils.isNotEmpty(timezone)) {
zoneId = ZoneId.of(timezone);
}
return date2LocalDateTime(date, zoneId);
}
/**
* date to local datetime
*
* @param date date
* @param zoneId zoneId
* @return local datetime
*/
private static LocalDateTime date2LocalDateTime(Date date, ZoneId zoneId) {
return LocalDateTime.ofInstant(date.toInstant(), zoneId);
} }
/** /**
@ -66,7 +83,22 @@ public final class DateUtils {
* @return date * @return date
*/ */
private static Date localDateTime2Date(LocalDateTime localDateTime) { private static Date localDateTime2Date(LocalDateTime localDateTime) {
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant(); String timezone = ThreadLocalContext.getTimezoneThreadLocal().get();
ZoneId zoneId = ZoneId.systemDefault();
if (StringUtils.isNotEmpty(timezone)) {
zoneId = ZoneId.of(timezone);
}
return localDateTime2Date(localDateTime, zoneId);
}
/**
* local datetime to date
*
* @param localDateTime local datetime
* @return date
*/
private static Date localDateTime2Date(LocalDateTime localDateTime, ZoneId zoneId) {
Instant instant = localDateTime.atZone(zoneId).toInstant();
return Date.from(instant); return Date.from(instant);
} }
@ -96,8 +128,11 @@ public final class DateUtils {
* @param format e.g. yyyy-MM-dd HH:mm:ss * @param format e.g. yyyy-MM-dd HH:mm:ss
* @return date string * @return date string
*/ */
public static String format(Date date, String format) { public static String format(Date date, String format, String timezone) {
return format(date2LocalDateTime(date), format); if (StringUtils.isEmpty(timezone)) {
return format(date2LocalDateTime(date), format);
}
return format(date2LocalDateTime(date, ZoneId.of(timezone)), format);
} }
/** /**
@ -118,7 +153,18 @@ public final class DateUtils {
* @return date string * @return date string
*/ */
public static String dateToString(Date date) { public static String dateToString(Date date) {
return format(date, Constants.YYYY_MM_DD_HH_MM_SS); return format(date, Constants.YYYY_MM_DD_HH_MM_SS, null);
}
/**
* convert time to yyyy-MM-dd HH:mm:ss format
*
* @param date date
* @param timezone timezone
* @return date string
*/
public static String dateToString(Date date, String timezone) {
return format(date, Constants.YYYY_MM_DD_HH_MM_SS, timezone);
} }
/** /**
@ -126,12 +172,16 @@ public final class DateUtils {
* *
* @param date date * @param date date
* @param format format * @param format format
* @param timezone timezone, if null, use system default timezone
* @return date * @return date
*/ */
public static Date parse(String date, String format) { public static Date parse(String date, String format, String timezone) {
try { try {
LocalDateTime ldt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(format)); LocalDateTime ldt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(format));
return localDateTime2Date(ldt); if (StringUtils.isEmpty(timezone)) {
return localDateTime2Date(ldt);
}
return localDateTime2Date(ldt, ZoneId.of(timezone));
} catch (Exception e) { } catch (Exception e) {
logger.error("error while parse date:" + date, e); logger.error("error while parse date:" + date, e);
} }
@ -141,11 +191,22 @@ public final class DateUtils {
/** /**
* convert date str to yyyy-MM-dd HH:mm:ss format * convert date str to yyyy-MM-dd HH:mm:ss format
* *
* @param str date string * @param date date string
* @return yyyy-MM-dd HH:mm:ss format
*/
public static Date stringToDate(String date) {
return parse(date, Constants.YYYY_MM_DD_HH_MM_SS, null);
}
/**
* convert date str to yyyy-MM-dd HH:mm:ss format
*
* @param date date string
* @param timezone
* @return yyyy-MM-dd HH:mm:ss format * @return yyyy-MM-dd HH:mm:ss format
*/ */
public static Date stringToDate(String str) { public static Date stringToDate(String date, String timezone) {
return parse(str, Constants.YYYY_MM_DD_HH_MM_SS); return parse(date, Constants.YYYY_MM_DD_HH_MM_SS, timezone);
} }
/** /**
@ -431,8 +492,7 @@ public final class DateUtils {
* @return current date * @return current date
*/ */
public static Date getCurrentDate() { public static Date getCurrentDate() {
return DateUtils.parse(DateUtils.getCurrentTime(), return new Date();
Constants.YYYY_MM_DD_HH_MM_SS);
} }
/** /**

6
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java

@ -24,9 +24,12 @@ import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKN
import static com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL; import static com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL;
import static com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS; import static com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.spi.utils.StringUtils; import org.apache.dolphinscheduler.spi.utils.StringUtils;
import java.io.IOException; import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -69,7 +72,8 @@ public class JSONUtils {
.configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true) .configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true)
.configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true) .configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)
.configure(REQUIRE_SETTERS_FOR_GETTERS, true) .configure(REQUIRE_SETTERS_FOR_GETTERS, true)
.setTimeZone(TimeZone.getDefault()); .setTimeZone(TimeZone.getDefault())
.setDateFormat(new SimpleDateFormat(Constants.YYYY_MM_DD_HH_MM_SS));
private JSONUtils() { private JSONUtils() {
throw new UnsupportedOperationException("Construct JSONUtils"); throw new UnsupportedOperationException("Construct JSONUtils");

6
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/LoggerUtils.java

@ -51,6 +51,7 @@ public class LoggerUtils {
/** /**
* build job id * build job id
*
* @return task id format * @return task id format
*/ */
public static String buildTaskId(Date firstSubmitTime, public static String buildTaskId(Date firstSubmitTime,
@ -59,8 +60,9 @@ public class LoggerUtils {
int processInstId, int processInstId,
int taskId) { int taskId) {
// like TaskAppId=TASK-20211107-798_1-4084-15210 // like TaskAppId=TASK-20211107-798_1-4084-15210
String firstSubmitTimeStr = DateUtils.format(firstSubmitTime, Constants.YYYYMMDD); String firstSubmitTimeStr = DateUtils.format(firstSubmitTime, Constants.YYYYMMDD, null);
return String.format("%s=%s-%s-%s_%s-%s-%s", TaskConstants.TASK_APPID_LOG_FORMAT, TaskConstants.TASK_LOGGER_INFO_PREFIX, firstSubmitTimeStr, processDefineCode, processDefineVersion, processInstId, taskId); return String.format("%s=%s-%s-%s_%s-%s-%s",
TaskConstants.TASK_APPID_LOG_FORMAT, TaskConstants.TASK_LOGGER_INFO_PREFIX, firstSubmitTimeStr, processDefineCode, processDefineVersion, processInstId, taskId);
} }
/** /**

2
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java

@ -66,7 +66,7 @@ public class ParameterUtils {
if (parameterMap != null && null != parameterMap.get(Constants.PARAMETER_DATETIME)) { if (parameterMap != null && null != parameterMap.get(Constants.PARAMETER_DATETIME)) {
//Get current time, schedule execute time //Get current time, schedule execute time
String cronTimeStr = parameterMap.get(Constants.PARAMETER_DATETIME); String cronTimeStr = parameterMap.get(Constants.PARAMETER_DATETIME);
cronTime = DateUtils.parse(cronTimeStr, Constants.PARAMETER_FORMAT_TIME); cronTime = DateUtils.parse(cronTimeStr, Constants.PARAMETER_FORMAT_TIME, null);
} else { } else {
cronTime = new Date(); cronTime = new Date();
} }

6
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/placeholder/BusinessTimeUtils.java

@ -71,9 +71,9 @@ public class BusinessTimeUtils {
break; break;
} }
Date businessCurrentDate = addDays(businessDate, 1); Date businessCurrentDate = addDays(businessDate, 1);
result.put(Constants.PARAMETER_CURRENT_DATE, format(businessCurrentDate, PARAMETER_FORMAT_DATE)); result.put(Constants.PARAMETER_CURRENT_DATE, format(businessCurrentDate, PARAMETER_FORMAT_DATE, null));
result.put(Constants.PARAMETER_BUSINESS_DATE, format(businessDate, PARAMETER_FORMAT_DATE)); result.put(Constants.PARAMETER_BUSINESS_DATE, format(businessDate, PARAMETER_FORMAT_DATE, null));
result.put(Constants.PARAMETER_DATETIME, format(businessCurrentDate, PARAMETER_FORMAT_TIME)); result.put(Constants.PARAMETER_DATETIME, format(businessCurrentDate, PARAMETER_FORMAT_TIME, null));
return result; return result;
} }
} }

6
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/placeholder/TimePlaceholderUtils.java

@ -337,14 +337,14 @@ public class TimePlaceholderUtils {
Map.Entry<Date, String> entry = calcTimeExpression(timeExpression, date); Map.Entry<Date, String> entry = calcTimeExpression(timeExpression, date);
String dateStr = DateUtils.format(entry.getKey(), entry.getValue()); String dateStr = DateUtils.format(entry.getKey(), entry.getValue(), null);
Date timestamp = DateUtils.parse(dateStr, Constants.PARAMETER_FORMAT_TIME); Date timestamp = DateUtils.parse(dateStr, Constants.PARAMETER_FORMAT_TIME, null);
value = String.valueOf(timestamp.getTime() / 1000); value = String.valueOf(timestamp.getTime() / 1000);
} else { } else {
Map.Entry<Date, String> entry = calcTimeExpression(expression, date); Map.Entry<Date, String> entry = calcTimeExpression(expression, date);
value = DateUtils.format(entry.getKey(), entry.getValue()); value = DateUtils.format(entry.getKey(), entry.getValue(), null);
} }
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);

21
dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DateUtilsTest.java

@ -17,12 +17,15 @@
package org.apache.dolphinscheduler.common.utils; package org.apache.dolphinscheduler.common.utils;
import org.apache.dolphinscheduler.common.thread.ThreadLocalContext;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.util.Date; import java.util.Date;
import java.util.TimeZone; import java.util.TimeZone;
import javax.management.timer.Timer;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@ -206,4 +209,20 @@ public class DateUtilsTest {
Assert.assertNull(DateUtils.getTimezone(null)); Assert.assertNull(DateUtils.getTimezone(null));
Assert.assertEquals(TimeZone.getTimeZone("MST"), DateUtils.getTimezone("MST")); Assert.assertEquals(TimeZone.getTimeZone("MST"), DateUtils.getTimezone("MST"));
} }
@Test
public void testTimezone() {
String time = "2019-01-28 00:00:00";
ThreadLocalContext.timezoneThreadLocal.set("UTC");
Date utcDate = DateUtils.stringToDate(time);
Assert.assertEquals(time, DateUtils.dateToString(utcDate));
ThreadLocalContext.timezoneThreadLocal.set("Asia/Shanghai");
Date shanghaiDate = DateUtils.stringToDate(time);
Assert.assertEquals(time, DateUtils.dateToString(shanghaiDate));
Assert.assertEquals(Timer.ONE_HOUR * 8, utcDate.getTime() - shanghaiDate.getTime());
}
} }

23
dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java

@ -23,6 +23,7 @@ import org.apache.dolphinscheduler.common.model.TaskNode;
import org.apache.dolphinscheduler.common.process.Property; import org.apache.dolphinscheduler.common.process.Property;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
@ -80,8 +81,8 @@ public class JSONUtilsTest {
String jsonStr = "{\"a\":\"b\",\"b\":\"d\"}"; String jsonStr = "{\"a\":\"b\",\"b\":\"d\"}";
ObjectNode objectNode = JSONUtils.createObjectNode(); ObjectNode objectNode = JSONUtils.createObjectNode();
objectNode.put("a","b"); objectNode.put("a", "b");
objectNode.put("b","d"); objectNode.put("b", "d");
String s = JSONUtils.toJsonString(objectNode); String s = JSONUtils.toJsonString(objectNode);
Assert.assertEquals(s, jsonStr); Assert.assertEquals(s, jsonStr);
} }
@ -258,4 +259,22 @@ public class JSONUtilsTest {
Assert.assertTrue(true); Assert.assertTrue(true);
} }
@Test
public void dateToString() {
String time = "2022-02-22 13:38:24";
Date date = DateUtils.stringToDate(time);
String json = JSONUtils.toJsonString(date);
Assert.assertEquals(json, "\"" + time + "\"");
String errorFormatTime = "Tue Feb 22 03:50:00 UTC 2022";
Assert.assertNull(DateUtils.stringToDate(errorFormatTime));
}
@Test
public void stringToDate() {
String json = "\"2022-02-22 13:38:24\"";
Date date = JSONUtils.parseObject(json, Date.class);
Assert.assertEquals(date, DateUtils.stringToDate("2022-02-22 13:38:24"));
}
} }

2
dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/placeholder/TimePlaceholderUtilsTest.java

@ -38,7 +38,7 @@ public class TimePlaceholderUtilsTest {
@Before @Before
public void init() { public void init() {
date = DateUtils.parse("20170101010101", "yyyyMMddHHmmss"); date = DateUtils.parse("20170101010101", "yyyyMMddHHmmss", null);
} }
@Test @Test

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AuditLog.java

@ -23,7 +23,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
@TableName("t_ds_audit_log") @TableName("t_ds_audit_log")
public class AuditLog { public class AuditLog {
@ -63,7 +62,6 @@ public class AuditLog {
/** /**
* operation time * operation time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date time; private Date time;
public Integer getUserId() { public Integer getUserId() {

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/CycleDependency.java

@ -32,12 +32,10 @@ public class CycleDependency {
/** /**
* last schedule time * last schedule time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date lastScheduleTime; private Date lastScheduleTime;
/** /**
* expiration time * expiration time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date expirationTime; private Date expirationTime;
/** /**
* cycle enum * cycle enum

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DataSource.java

@ -68,13 +68,11 @@ public class DataSource {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date updateTime; private Date updateTime;
public DataSource() { public DataSource() {

3
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqComparisonType.java

@ -24,7 +24,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
@TableName("t_ds_dq_comparison_type") @TableName("t_ds_dq_comparison_type")
public class DqComparisonType implements Serializable { public class DqComparisonType implements Serializable {
@ -62,13 +61,11 @@ public class DqComparisonType implements Serializable {
* create_time * create_time
*/ */
@TableField(value = "create_time") @TableField(value = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update_time * update_time
*/ */
@TableField(value = "update_time") @TableField(value = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqExecuteResult.java

@ -147,13 +147,11 @@ public class DqExecuteResult implements Serializable {
* create_time * create_time
*/ */
@TableField(value = "create_time") @TableField(value = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update_time * update_time
*/ */
@TableField(value = "update_time") @TableField(value = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

3
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleExecuteSql.java

@ -26,7 +26,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
/** /**
* RuleExecuteSql * RuleExecuteSql
@ -67,13 +66,11 @@ public class DqRuleExecuteSql implements Serializable {
* create_time * create_time
*/ */
@TableField(value = "create_time") @TableField(value = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update_time * update_time
*/ */
@TableField(value = "update_time") @TableField(value = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

3
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleInputEntry.java

@ -28,7 +28,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
/** /**
* RuleInputEntry * RuleInputEntry
@ -121,13 +120,11 @@ public class DqRuleInputEntry implements Serializable {
* create_time * create_time
*/ */
@TableField(value = "create_time") @TableField(value = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update_time * update_time
*/ */
@TableField(value = "update_time") @TableField(value = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

4
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqTaskStatisticsValue.java

@ -24,7 +24,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
@TableName("t_ds_dq_task_statistics_value") @TableName("t_ds_dq_task_statistics_value")
public class DqTaskStatisticsValue implements Serializable { public class DqTaskStatisticsValue implements Serializable {
@ -82,19 +81,16 @@ public class DqTaskStatisticsValue implements Serializable {
* data time * data time
*/ */
@TableField(value = "data_time") @TableField(value = "data_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date dataTime; private Date dataTime;
/** /**
* create time * create time
*/ */
@TableField(value = "create_time") @TableField(value = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@TableField(value = "update_time") @TableField(value = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Environment.java

@ -55,10 +55,8 @@ public class Environment {
*/ */
private Integer operator; private Integer operator;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/EnvironmentWorkerGroupRelation.java

@ -48,10 +48,8 @@ public class EnvironmentWorkerGroupRelation {
*/ */
private Integer operator; private Integer operator;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

3
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ErrorCommand.java

@ -85,13 +85,11 @@ public class ErrorCommand {
/** /**
* schedule time * schedule time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date scheduleTime; private Date scheduleTime;
/** /**
* start time * start time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date startTime; private Date startTime;
/** /**
@ -102,7 +100,6 @@ public class ErrorCommand {
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date updateTime; private Date updateTime;
/** /**

1
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/MonitorRecord.java

@ -58,7 +58,6 @@ public class MonitorRecord {
/** /**
* start date * start date
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date date; private Date date;
public Flag getState() { public Flag getState() {

4
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessAlertContent.java

@ -56,10 +56,8 @@ public class ProcessAlertContent implements Serializable {
private Flag recovery; private Flag recovery;
@JsonProperty("runTimes") @JsonProperty("runTimes")
private Integer runTimes; private Integer runTimes;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@JsonProperty("processStartTime") @JsonProperty("processStartTime")
private Date processStartTime; private Date processStartTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@JsonProperty("processEndTime") @JsonProperty("processEndTime")
private Date processEndTime; private Date processEndTime;
@JsonProperty("processHost") @JsonProperty("processHost")
@ -78,10 +76,8 @@ public class ProcessAlertContent implements Serializable {
private Integer retryTimes; private Integer retryTimes;
@JsonProperty("taskState") @JsonProperty("taskState")
private ExecutionStatus taskState; private ExecutionStatus taskState;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@JsonProperty("taskStartTime") @JsonProperty("taskStartTime")
private Date taskStartTime; private Date taskStartTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@JsonProperty("taskEndTime") @JsonProperty("taskEndTime")
private Date taskEndTime; private Date taskEndTime;
@JsonProperty("taskHost") @JsonProperty("taskHost")

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java

@ -100,13 +100,11 @@ public class ProcessDefinition {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
/** /**

1
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinitionLog.java

@ -36,7 +36,6 @@ public class ProcessDefinitionLog extends ProcessDefinition {
/** /**
* operateTime * operateTime
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date operateTime; private Date operateTime;
public ProcessDefinitionLog() { public ProcessDefinitionLog() {

5
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java

@ -70,13 +70,11 @@ public class ProcessInstance {
/** /**
* start time * start time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime; private Date startTime;
/** /**
* end time * end time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime; private Date endTime;
/** /**
@ -137,13 +135,11 @@ public class ProcessInstance {
/** /**
* schedule time * schedule time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date scheduleTime; private Date scheduleTime;
/** /**
* command start time * command start time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date commandStartTime; private Date commandStartTime;
/** /**
@ -252,7 +248,6 @@ public class ProcessInstance {
/** /**
* re-start time * re-start time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date restartTime; private Date restartTime;
public ProcessInstance() { public ProcessInstance() {

3
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessTaskRelation.java

@ -26,7 +26,6 @@ import java.util.Objects;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@ -97,13 +96,11 @@ public class ProcessTaskRelation {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public ProcessTaskRelation() { public ProcessTaskRelation() {

1
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessTaskRelationLog.java

@ -36,7 +36,6 @@ public class ProcessTaskRelationLog extends ProcessTaskRelation {
/** /**
* operate time * operate time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date operateTime; private Date operateTime;
public ProcessTaskRelationLog() { public ProcessTaskRelationLog() {

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Queue.java

@ -46,12 +46,10 @@ public class Queue {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Resource.java

@ -82,13 +82,11 @@ public class Resource {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public Resource() { public Resource() {

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ResourcesUser.java

@ -53,13 +53,11 @@ public class ResourcesUser {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

4
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Schedule.java

@ -66,13 +66,11 @@ public class Schedule {
/** /**
* schedule start time * schedule start time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date startTime; private Date startTime;
/** /**
* schedule end time * schedule end time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date endTime; private Date endTime;
/** /**
@ -99,13 +97,11 @@ public class Schedule {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date updateTime; private Date updateTime;
/** /**

1
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Session.java

@ -43,7 +43,6 @@ public class Session {
/** /**
* last login time * last login time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date lastLoginTime; private Date lastLoginTime;
/** /**

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskAlertContent.java

@ -45,10 +45,8 @@ public class TaskAlertContent implements Serializable {
private String processInstanceName; private String processInstanceName;
@JsonProperty("state") @JsonProperty("state")
private ExecutionStatus state; private ExecutionStatus state;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@JsonProperty("startTime") @JsonProperty("startTime")
private Date startTime; private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@JsonProperty("endTime") @JsonProperty("endTime")
private Date endTime; private Date endTime;
@JsonProperty("host") @JsonProperty("host")

3
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinition.java

@ -38,7 +38,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@ -180,13 +179,11 @@ public class TaskDefinition {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
/** /**

1
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinitionLog.java

@ -36,7 +36,6 @@ public class TaskDefinitionLog extends TaskDefinition {
/** /**
* operate time * operate time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date operateTime; private Date operateTime;
public TaskDefinitionLog() { public TaskDefinitionLog() {

3
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskGroup.java

@ -23,7 +23,6 @@ import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
/** /**
* Task Group * Task Group
@ -60,12 +59,10 @@ public class TaskGroup implements Serializable {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
/** /**
* project Id * project Id

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskGroupQueue.java

@ -89,12 +89,10 @@ public class TaskGroupQueue implements Serializable {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public TaskGroupQueue() { public TaskGroupQueue() {

7
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java

@ -29,8 +29,6 @@ import org.apache.dolphinscheduler.common.task.switchtask.SwitchParameters;
import org.apache.dolphinscheduler.common.utils.DateUtils; import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils; import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.commons.lang3.SerializationUtils;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
@ -39,7 +37,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
/** /**
@ -100,25 +97,21 @@ public class TaskInstance implements Serializable {
/** /**
* task first submit time. * task first submit time.
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date firstSubmitTime; private Date firstSubmitTime;
/** /**
* task submit time * task submit time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date submitTime; private Date submitTime;
/** /**
* task start time * task start time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime; private Date startTime;
/** /**
* task end time * task end time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime; private Date endTime;
/** /**

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskMainInfo.java

@ -52,13 +52,11 @@ public class TaskMainInfo {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date taskCreateTime; private Date taskCreateTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date taskUpdateTime; private Date taskUpdateTime;
/** /**

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskRecord.java

@ -48,13 +48,11 @@ public class TaskRecord {
/** /**
* start date * start date
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date startTime; private Date startTime;
/** /**
* end date * end date
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date endTime; private Date endTime;
/** /**

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Tenant.java

@ -67,12 +67,10 @@ public class Tenant {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date updateTime; private Date updateTime;

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/UDFUser.java

@ -53,13 +53,11 @@ public class UDFUser {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/UdfFunc.java

@ -90,13 +90,11 @@ public class UdfFunc {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/User.java

@ -104,13 +104,11 @@ public class User {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/WorkerGroup.java

@ -38,10 +38,8 @@ public class WorkerGroup {
private String addrList; private String addrList;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
@TableField(exist = false) @TableField(exist = false)

2
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/WorkerServer.java

@ -51,13 +51,11 @@ public class WorkerServer {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createTime; private Date createTime;
/** /**
* last heart beat time * last heart beat time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date lastHeartbeatTime; private Date lastHeartbeatTime;
public int getId() { public int getId() {

5
dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/Constants.java

@ -59,4 +59,9 @@ public final class Constants {
public static final String APPEND = "append"; public static final String APPEND = "append";
public static final String SPARK_APP_NAME = "spark.app.name"; public static final String SPARK_APP_NAME = "spark.app.name";
/**
* date format of yyyy-MM-dd HH:mm:ss
*/
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
} }

6
dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/utils/JsonUtils.java

@ -24,6 +24,9 @@ import static com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN
import static com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS; import static com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS;
import static com.fasterxml.jackson.databind.SerializationFeature.FAIL_ON_EMPTY_BEANS; import static com.fasterxml.jackson.databind.SerializationFeature.FAIL_ON_EMPTY_BEANS;
import org.apache.dolphinscheduler.data.quality.Constants;
import java.text.SimpleDateFormat;
import java.util.TimeZone; import java.util.TimeZone;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -49,7 +52,8 @@ public class JsonUtils {
.configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true) .configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)
.configure(REQUIRE_SETTERS_FOR_GETTERS, true) .configure(REQUIRE_SETTERS_FOR_GETTERS, true)
.configure(FAIL_ON_EMPTY_BEANS,false) .configure(FAIL_ON_EMPTY_BEANS,false)
.setTimeZone(TimeZone.getDefault()); .setTimeZone(TimeZone.getDefault())
.setDateFormat(new SimpleDateFormat(Constants.YYYY_MM_DD_HH_MM_SS));
private JsonUtils() { private JsonUtils() {
throw new UnsupportedOperationException("Construct JSONUtils"); throw new UnsupportedOperationException("Construct JSONUtils");

8
dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java

@ -37,6 +37,8 @@ import org.apache.dolphinscheduler.server.master.runner.FailoverExecuteThread;
import org.apache.dolphinscheduler.server.master.runner.MasterSchedulerService; import org.apache.dolphinscheduler.server.master.runner.MasterSchedulerService;
import org.apache.dolphinscheduler.service.bean.SpringApplicationContext; import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
import java.util.TimeZone;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import org.quartz.Scheduler; import org.quartz.Scheduler;
@ -44,6 +46,7 @@ import org.quartz.SchedulerException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.annotation.EnableCaching;
@ -101,6 +104,9 @@ public class MasterServer implements IStoppable {
@Autowired @Autowired
private LoggerRequestProcessor loggerRequestProcessor; private LoggerRequestProcessor loggerRequestProcessor;
@Value("${spring.jackson.time-zone:UTC}")
private String timezone;
public static void main(String[] args) { public static void main(String[] args) {
Thread.currentThread().setName(Constants.THREAD_NAME_MASTER_SERVER); Thread.currentThread().setName(Constants.THREAD_NAME_MASTER_SERVER);
SpringApplication.run(MasterServer.class); SpringApplication.run(MasterServer.class);
@ -111,6 +117,8 @@ public class MasterServer implements IStoppable {
*/ */
@PostConstruct @PostConstruct
public void run() throws SchedulerException { public void run() throws SchedulerException {
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
// init remoting server // init remoting server
NettyServerConfig serverConfig = new NettyServerConfig(); NettyServerConfig serverConfig = new NettyServerConfig();
serverConfig.setListenPort(masterConfig.getListenPort()); serverConfig.setListenPort(masterConfig.getListenPort());

2
dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/processor/queue/TaskResponseEvent.java

@ -49,13 +49,11 @@ public class TaskResponseEvent {
/** /**
* start time * start time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date startTime; private Date startTime;
/** /**
* end time * end time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date endTime; private Date endTime;
/** /**

2
dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteThread.java

@ -706,7 +706,7 @@ public class WorkflowExecuteThread {
if (cmdParam.containsKey(Constants.CMD_PARAM_RECOVERY_START_NODE_STRING)) { if (cmdParam.containsKey(Constants.CMD_PARAM_RECOVERY_START_NODE_STRING)) {
cmdParam.remove(Constants.CMD_PARAM_RECOVERY_START_NODE_STRING); cmdParam.remove(Constants.CMD_PARAM_RECOVERY_START_NODE_STRING);
} }
cmdParam.replace(CMDPARAM_COMPLEMENT_DATA_START_DATE, DateUtils.format(scheduleDate, "yyyy-MM-dd HH:mm:ss")); cmdParam.replace(CMDPARAM_COMPLEMENT_DATA_START_DATE, DateUtils.format(scheduleDate, "yyyy-MM-dd HH:mm:ss", null));
command.setCommandParam(JSONUtils.toJsonString(cmdParam)); command.setCommandParam(JSONUtils.toJsonString(cmdParam));
command.setTaskDependType(processInstance.getTaskDependType()); command.setTaskDependType(processInstance.getTaskDependType());
command.setFailureStrategy(processInstance.getFailureStrategy()); command.setFailureStrategy(processInstance.getFailureStrategy());

2
dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/DependentTaskProcessor.java

@ -36,7 +36,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
/** /**
@ -61,7 +60,6 @@ public class DependentTaskProcessor extends BaseTaskProcessor {
/** /**
* dependent date * dependent date
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date dependentDate; private Date dependentDate;
DependResult result; DependResult result;

3
dolphinscheduler-master/src/main/resources/application.yaml

@ -19,6 +19,9 @@ spring:
banner-mode: off banner-mode: off
application: application:
name: master-server name: master-server
jackson:
time-zone: UTC
date-format: "yyyy-MM-dd HH:mm:ss"
cache: cache:
# default enable cache, you can disable by `type: none` # default enable cache, you can disable by `type: none`
type: none type: none

10
dolphinscheduler-python/src/main/java/org/apache/dolphinscheduler/server/PythonGatewayServer.java

@ -62,6 +62,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.TimeZone;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
@ -69,6 +70,7 @@ import javax.annotation.PostConstruct;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@ -138,6 +140,14 @@ public class PythonGatewayServer extends SpringBootServletInitializer {
@Autowired @Autowired
private PythonGatewayConfig pythonGatewayConfig; private PythonGatewayConfig pythonGatewayConfig;
@Value("${spring.jackson.time-zone:UTC}")
private String timezone;
@PostConstruct
public void init() {
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
}
// TODO replace this user to build in admin user if we make sure build in one could not be change // TODO replace this user to build in admin user if we make sure build in one could not be change
private final User dummyAdminUser = new User() { private final User dummyAdminUser = new User() {
{ {

1
dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteAckCommand.java

@ -42,7 +42,6 @@ public class TaskExecuteAckCommand implements Serializable {
/** /**
* startTime * startTime
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime; private Date startTime;
/** /**

3
dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/TaskExecuteResponseCommand.java

@ -22,8 +22,6 @@ import org.apache.dolphinscheduler.common.utils.JSONUtils;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/** /**
* execute task response command * execute task response command
*/ */
@ -56,7 +54,6 @@ public class TaskExecuteResponseCommand implements Serializable {
/** /**
* end time * end time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime; private Date endTime;

2
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/LogUtils.java

@ -63,7 +63,7 @@ public class LogUtils {
.map(TaskLogDiscriminator::getLogBase) .map(TaskLogDiscriminator::getLogBase)
.map(e -> Paths.get(e) .map(e -> Paths.get(e)
.toAbsolutePath() .toAbsolutePath()
.resolve(DateUtils.format(firstSubmitTime,Constants.YYYYMMDD)) .resolve(DateUtils.format(firstSubmitTime,Constants.YYYYMMDD, null))
.resolve(taskLogFileName)) .resolve(taskLogFileName))
.map(Path::toString) .map(Path::toString)
.orElse(""); .orElse("");

2
dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/LogUtilsTest.java

@ -65,7 +65,7 @@ public class LogUtilsTest {
Path logPath = Paths.get(".").toAbsolutePath().getParent() Path logPath = Paths.get(".").toAbsolutePath().getParent()
.resolve(logBase) .resolve(logBase)
.resolve(DateUtils.format(firstSubmitTime, Constants.YYYYMMDD)) .resolve(DateUtils.format(firstSubmitTime, Constants.YYYYMMDD, null))
.resolve("1_1-100-1000.log"); .resolve("1_1-100-1000.log");
Assert.assertEquals(logPath.toString(), LogUtils.getTaskLogPath(taskExecutionContext)); Assert.assertEquals(logPath.toString(), LogUtils.getTaskLogPath(taskExecutionContext));
} }

37
dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/json/DateJsonSerializer.java

@ -0,0 +1,37 @@
/*
* 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.service.json;
import org.apache.dolphinscheduler.common.utils.DateUtils;
import java.io.IOException;
import java.util.Date;
import org.springframework.boot.jackson.JsonComponent;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
@JsonComponent
public class DateJsonSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(DateUtils.dateToString(value));
}
}

3
dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/queue/entity/TaskExecutionContext.java

@ -53,13 +53,11 @@ public class TaskExecutionContext implements Serializable {
/** /**
* task first submit time. * task first submit time.
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date firstSubmitTime; private Date firstSubmitTime;
/** /**
* task start time * task start time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime; private Date startTime;
/** /**
@ -116,7 +114,6 @@ public class TaskExecutionContext implements Serializable {
/** /**
* process instance schedule time * process instance schedule time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date scheduleTime; private Date scheduleTime;
/** /**

5
dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/task/request/TaskRequest.java

@ -23,8 +23,6 @@ import org.apache.dolphinscheduler.spi.task.Property;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import com.fasterxml.jackson.annotation.JsonFormat;
/** /**
* to master/worker task transport * to master/worker task transport
*/ */
@ -43,13 +41,11 @@ public class TaskRequest {
/** /**
* task first submit time. * task first submit time.
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date firstSubmitTime; private Date firstSubmitTime;
/** /**
* task start time * task start time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime; private Date startTime;
/** /**
@ -96,7 +92,6 @@ public class TaskRequest {
/** /**
* process instance schedule time * process instance schedule time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date scheduleTime; private Date scheduleTime;
/** /**

2
dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/task/request/UdfFuncRequest.java

@ -83,13 +83,11 @@ public class UdfFuncRequest {
/** /**
* create time * create time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update time * update time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

4
dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/utils/JSONUtils.java

@ -25,6 +25,7 @@ import static com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN
import static com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS; import static com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -62,7 +63,8 @@ public class JSONUtils {
.configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true) .configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true)
.configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true) .configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)
.configure(REQUIRE_SETTERS_FOR_GETTERS, true) .configure(REQUIRE_SETTERS_FOR_GETTERS, true)
.setTimeZone(TimeZone.getDefault()); .setTimeZone(TimeZone.getDefault())
.setDateFormat(new SimpleDateFormat(Constants.YYYY_MM_DD_HH_MM_SS));
private JSONUtils() { private JSONUtils() {
throw new UnsupportedOperationException("Construct JSONUtils"); throw new UnsupportedOperationException("Construct JSONUtils");

15
dolphinscheduler-standalone-server/src/main/java/org/apache/dolphinscheduler/StandaloneServer.java

@ -19,14 +19,29 @@ package org.apache.dolphinscheduler;
import org.apache.curator.test.TestingServer; import org.apache.curator.test.TestingServer;
import java.util.TimeZone;
import javax.annotation.PostConstruct;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication @SpringBootApplication
public class StandaloneServer { public class StandaloneServer {
@Value("${spring.jackson.time-zone:UTC}")
private String timezone;
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
final TestingServer server = new TestingServer(true); final TestingServer server = new TestingServer(true);
System.setProperty("registry.zookeeper.connect-string", server.getConnectString()); System.setProperty("registry.zookeeper.connect-string", server.getConnectString());
SpringApplication.run(StandaloneServer.class, args); SpringApplication.run(StandaloneServer.class, args);
} }
@PostConstruct
public void run() {
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
}
} }

5
dolphinscheduler-standalone-server/src/main/resources/application.yaml

@ -18,6 +18,9 @@
spring: spring:
application: application:
name: standalone-server name: standalone-server
jackson:
time-zone: UTC
date-format: "yyyy-MM-dd HH:mm:ss"
main: main:
banner-mode: off banner-mode: off
cache: cache:
@ -59,8 +62,6 @@ spring:
org.quartz.scheduler.makeSchedulerThreadDaemon: true org.quartz.scheduler.makeSchedulerThreadDaemon: true
org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.clusterCheckinInterval: 5000 org.quartz.jobStore.clusterCheckinInterval: 5000
jackson:
time-zone: GMT+8
servlet: servlet:
multipart: multipart:
max-file-size: 1024MB max-file-size: 1024MB

2
dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleExecuteSql.java

@ -55,12 +55,10 @@ public class DqRuleExecuteSql implements Serializable {
/** /**
* create_time * create_time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update_time * update_time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

4
dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleInputEntry.java

@ -24,8 +24,6 @@ import org.apache.dolphinscheduler.spi.task.dq.enums.ValueType;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/** /**
* RuleInputEntry * RuleInputEntry
*/ */
@ -98,12 +96,10 @@ public class DqRuleInputEntry implements Serializable {
/** /**
* create_time * create_time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
/** /**
* update_time * update_time
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {

3
dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue

@ -274,7 +274,8 @@
schedule: JSON.stringify({ schedule: JSON.stringify({
startTime: this.scheduleTime[0], startTime: this.scheduleTime[0],
endTime: this.scheduleTime[1], endTime: this.scheduleTime[1],
crontab: this.crontab crontab: this.crontab,
timezoneId: this.timezoneId
}) })
} }

7
dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java

@ -44,12 +44,14 @@ import org.apache.commons.collections4.CollectionUtils;
import java.util.Collection; import java.util.Collection;
import java.util.Set; import java.util.Set;
import java.util.TimeZone;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
@ -122,6 +124,9 @@ public class WorkerServer implements IStoppable {
@Autowired @Autowired
private LoggerRequestProcessor loggerRequestProcessor; private LoggerRequestProcessor loggerRequestProcessor;
@Value("${spring.jackson.time-zone:UTC}")
private String timezone;
/** /**
* worker server startup, not use web service * worker server startup, not use web service
* *
@ -137,6 +142,8 @@ public class WorkerServer implements IStoppable {
*/ */
@PostConstruct @PostConstruct
public void run() { public void run() {
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
// init remoting server // init remoting server
NettyServerConfig serverConfig = new NettyServerConfig(); NettyServerConfig serverConfig = new NettyServerConfig();
serverConfig.setListenPort(workerConfig.getListenPort()); serverConfig.setListenPort(workerConfig.getListenPort());

2
dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java

@ -378,7 +378,7 @@ public class TaskExecuteThread implements Runnable, Delayed {
// replace variable TIME with $[YYYYmmddd...] in shell file when history run job and batch complement job // replace variable TIME with $[YYYYmmddd...] in shell file when history run job and batch complement job
if (taskExecutionContext.getScheduleTime() != null) { if (taskExecutionContext.getScheduleTime() != null) {
Date date = taskExecutionContext.getScheduleTime(); Date date = taskExecutionContext.getScheduleTime();
String dateTime = DateUtils.format(date, Constants.PARAMETER_FORMAT_TIME); String dateTime = DateUtils.format(date, Constants.PARAMETER_FORMAT_TIME, null);
Property p = new Property(); Property p = new Property();
p.setValue(dateTime); p.setValue(dateTime);
p.setProp(Constants.PARAMETER_DATETIME); p.setProp(Constants.PARAMETER_DATETIME);

3
dolphinscheduler-worker/src/main/resources/application.yaml

@ -19,6 +19,9 @@ spring:
banner-mode: off banner-mode: off
application: application:
name: worker-server name: worker-server
jackson:
time-zone: UTC
date-format: "yyyy-MM-dd HH:mm:ss"
datasource: datasource:
driver-class-name: org.postgresql.Driver driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://127.0.0.1:5432/dolphinscheduler url: jdbc:postgresql://127.0.0.1:5432/dolphinscheduler

1
script/env/dolphinscheduler_env.sh vendored

@ -27,6 +27,7 @@ export DATAX_HOME=${DATAX_HOME:-/opt/soft/datax}
export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_HOME/bin:$PATH export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_HOME/bin:$PATH
export SPRING_JACKSON_TIME_ZONE=${SPRING_JACKSON_TIME_ZONE:-UTC}
export DATABASE=${DATABASE:-postgresql} export DATABASE=${DATABASE:-postgresql}
export SPRING_PROFILES_ACTIVE=${DATABASE} export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_DRIVER_CLASS_NAME export SPRING_DATASOURCE_DRIVER_CLASS_NAME

Loading…
Cancel
Save