[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>ui-next
parent
1ffb5d6e8d
commit
84f2cfec39
|
|
@ -27,6 +27,7 @@ import org.apache.dolphinscheduler.remote.config.NettyServerConfig;
|
|||
|
||||
import java.io.Closeable;
|
||||
import java.util.List;
|
||||
import java.util.TimeZone;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
|
@ -36,6 +37,7 @@ import javax.annotation.PreDestroy;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
|
|
@ -58,6 +60,9 @@ public class AlertServer implements Closeable {
|
|||
@Autowired
|
||||
private AlertConfig config;
|
||||
|
||||
@Value("${spring.jackson.time-zone:UTC}")
|
||||
private String timezone;
|
||||
|
||||
public AlertServer(PluginDao pluginDao, AlertDao alertDao, AlertPluginManager alertPluginManager, AlertSender alertSender, AlertRequestProcessor alertRequestProcessor) {
|
||||
this.pluginDao = pluginDao;
|
||||
this.alertDao = alertDao;
|
||||
|
|
@ -70,6 +75,11 @@ public class AlertServer implements Closeable {
|
|||
SpringApplication.run(AlertServer.class, args);
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void start(ApplicationReadyEvent readyEvent) {
|
||||
logger.info("Starting Alert server");
|
||||
|
|
|
|||
|
|
@ -18,6 +18,9 @@
|
|||
spring:
|
||||
application:
|
||||
name: alert-server
|
||||
jackson:
|
||||
time-zone: UTC
|
||||
date-format: "yyyy-MM-dd HH:mm:ss"
|
||||
main:
|
||||
banner-mode: off
|
||||
datasource:
|
||||
|
|
|
|||
|
|
@ -17,6 +17,12 @@
|
|||
|
||||
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.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.web.servlet.ServletComponentScan;
|
||||
|
|
@ -27,8 +33,15 @@ import org.springframework.context.annotation.ComponentScan;
|
|||
@ComponentScan("org.apache.dolphinscheduler")
|
||||
public class ApiApplicationServer {
|
||||
|
||||
@Value("${spring.jackson.time-zone:UTC}")
|
||||
private String timezone;
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(ApiApplicationServer.class);
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void run() {
|
||||
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,8 +19,6 @@ package org.apache.dolphinscheduler.api.dto;
|
|||
|
||||
import java.util.Date;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
public class AuditDto {
|
||||
|
||||
private String userName;
|
||||
|
|
@ -29,7 +27,6 @@ public class AuditDto {
|
|||
|
||||
private String operation;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date time;
|
||||
|
||||
private String resourceName;
|
||||
|
|
|
|||
|
|
@ -26,9 +26,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
|
|||
*/
|
||||
public class ScheduleParam {
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date startTime;
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date endTime;
|
||||
private String crontab;
|
||||
private String timezoneId;
|
||||
|
|
|
|||
|
|
@ -43,19 +43,16 @@ public class Task {
|
|||
/**
|
||||
* task execution date
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date executionDate;
|
||||
|
||||
/**
|
||||
* task iso start
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date isoStart;
|
||||
|
||||
/**
|
||||
* task iso end
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date isoEnd;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -51,13 +51,11 @@ public class Instance {
|
|||
/**
|
||||
* node start time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
* node end time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date endTime;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import org.apache.dolphinscheduler.api.enums.Status;
|
|||
import org.apache.dolphinscheduler.api.security.Authenticator;
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
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.mapper.UserMapper;
|
||||
|
||||
|
|
@ -34,6 +35,7 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
/**
|
||||
* login interceptor, must log in first
|
||||
|
|
@ -84,9 +86,13 @@ public class LoginHandlerInterceptor implements HandlerInterceptor {
|
|||
logger.info(Status.USER_DISABLED.getMsg());
|
||||
return false;
|
||||
}
|
||||
|
||||
request.setAttribute(Constants.SESSION_USER, user);
|
||||
ThreadLocalContext.getTimezoneThreadLocal().set(user.getTimeZone());
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
||||
ThreadLocalContext.getTimezoneThreadLocal().remove();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -562,7 +562,9 @@ public class SchedulerServiceImpl extends BaseServiceImpl implements SchedulerSe
|
|||
return result;
|
||||
}
|
||||
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);
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,9 +26,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
|
|||
* date interval class
|
||||
*/
|
||||
public class DateInterval {
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date startTime;
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date endTime;
|
||||
|
||||
public DateInterval(Date beginTime, Date endTime) {
|
||||
|
|
|
|||
|
|
@ -54,13 +54,11 @@ public class Server {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* laster heart beat time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date lastHeartbeatTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -55,13 +55,11 @@ public class WorkerServerModel {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* last heart beat time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date lastHeartbeatTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -18,6 +18,7 @@
|
|||
package org.apache.dolphinscheduler.common.utils;
|
||||
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
import org.apache.dolphinscheduler.common.thread.ThreadLocalContext;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
||||
|
|
@ -56,7 +57,23 @@ public final class DateUtils {
|
|||
* @return local datetime
|
||||
*/
|
||||
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
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
@ -96,8 +128,11 @@ public final class DateUtils {
|
|||
* @param format e.g. yyyy-MM-dd HH:mm:ss
|
||||
* @return date string
|
||||
*/
|
||||
public static String format(Date date, String format) {
|
||||
return format(date2LocalDateTime(date), format);
|
||||
public static String format(Date date, String format, String timezone) {
|
||||
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
|
||||
*/
|
||||
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 format format
|
||||
* @param timezone timezone, if null, use system default timezone
|
||||
* @return date
|
||||
*/
|
||||
public static Date parse(String date, String format) {
|
||||
public static Date parse(String date, String format, String timezone) {
|
||||
try {
|
||||
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) {
|
||||
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
|
||||
*
|
||||
* @param str date string
|
||||
* @param date date string
|
||||
* @return yyyy-MM-dd HH:mm:ss format
|
||||
*/
|
||||
public static Date stringToDate(String str) {
|
||||
return parse(str, Constants.YYYY_MM_DD_HH_MM_SS);
|
||||
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
|
||||
*/
|
||||
public static Date stringToDate(String date, String timezone) {
|
||||
return parse(date, Constants.YYYY_MM_DD_HH_MM_SS, timezone);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -431,8 +492,7 @@ public final class DateUtils {
|
|||
* @return current date
|
||||
*/
|
||||
public static Date getCurrentDate() {
|
||||
return DateUtils.parse(DateUtils.getCurrentTime(),
|
||||
Constants.YYYY_MM_DD_HH_MM_SS);
|
||||
return new Date();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS;
|
||||
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
import org.apache.dolphinscheduler.spi.utils.StringUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
|
@ -69,7 +72,8 @@ public class JSONUtils {
|
|||
.configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true)
|
||||
.configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, 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() {
|
||||
throw new UnsupportedOperationException("Construct JSONUtils");
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ public class LoggerUtils {
|
|||
|
||||
/**
|
||||
* build job id
|
||||
*
|
||||
* @return task id format
|
||||
*/
|
||||
public static String buildTaskId(Date firstSubmitTime,
|
||||
|
|
@ -59,8 +60,9 @@ public class LoggerUtils {
|
|||
int processInstId,
|
||||
int taskId) {
|
||||
// like TaskAppId=TASK-20211107-798_1-4084-15210
|
||||
String firstSubmitTimeStr = DateUtils.format(firstSubmitTime, Constants.YYYYMMDD);
|
||||
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);
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ public class ParameterUtils {
|
|||
if (parameterMap != null && null != parameterMap.get(Constants.PARAMETER_DATETIME)) {
|
||||
//Get current time, schedule execute time
|
||||
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 {
|
||||
cronTime = new Date();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,9 +71,9 @@ public class BusinessTimeUtils {
|
|||
break;
|
||||
}
|
||||
Date businessCurrentDate = addDays(businessDate, 1);
|
||||
result.put(Constants.PARAMETER_CURRENT_DATE, format(businessCurrentDate, PARAMETER_FORMAT_DATE));
|
||||
result.put(Constants.PARAMETER_BUSINESS_DATE, format(businessDate, PARAMETER_FORMAT_DATE));
|
||||
result.put(Constants.PARAMETER_DATETIME, format(businessCurrentDate, PARAMETER_FORMAT_TIME));
|
||||
result.put(Constants.PARAMETER_CURRENT_DATE, format(businessCurrentDate, PARAMETER_FORMAT_DATE, null));
|
||||
result.put(Constants.PARAMETER_BUSINESS_DATE, format(businessDate, PARAMETER_FORMAT_DATE, null));
|
||||
result.put(Constants.PARAMETER_DATETIME, format(businessCurrentDate, PARAMETER_FORMAT_TIME, null));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -337,14 +337,14 @@ public class TimePlaceholderUtils {
|
|||
|
||||
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);
|
||||
} else {
|
||||
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) {
|
||||
logger.error(e.getMessage(), e);
|
||||
|
|
|
|||
|
|
@ -17,12 +17,15 @@
|
|||
|
||||
package org.apache.dolphinscheduler.common.utils;
|
||||
|
||||
import org.apache.dolphinscheduler.common.thread.ThreadLocalContext;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Date;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import javax.management.timer.Timer;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
|
|
@ -206,4 +209,20 @@ public class DateUtilsTest {
|
|||
Assert.assertNull(DateUtils.getTimezone(null));
|
||||
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,6 +23,7 @@ import org.apache.dolphinscheduler.common.model.TaskNode;
|
|||
import org.apache.dolphinscheduler.common.process.Property;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
|
@ -80,8 +81,8 @@ public class JSONUtilsTest {
|
|||
String jsonStr = "{\"a\":\"b\",\"b\":\"d\"}";
|
||||
|
||||
ObjectNode objectNode = JSONUtils.createObjectNode();
|
||||
objectNode.put("a","b");
|
||||
objectNode.put("b","d");
|
||||
objectNode.put("a", "b");
|
||||
objectNode.put("b", "d");
|
||||
String s = JSONUtils.toJsonString(objectNode);
|
||||
Assert.assertEquals(s, jsonStr);
|
||||
}
|
||||
|
|
@ -155,7 +156,7 @@ public class JSONUtilsTest {
|
|||
Assert.assertEquals("[1,2,3]", JSONUtils.getNodeString("{\"bar\": [1,2,3]}", "bar"));
|
||||
Assert.assertEquals("{\"1\":\"2\",\"2\":3}", JSONUtils.getNodeString("{\"bar\": {\"1\":\"2\",\"2\":3}}", "bar"));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testJsonByteArray() {
|
||||
String str = "foo";
|
||||
|
|
@ -258,4 +259,22 @@ public class JSONUtilsTest {
|
|||
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"));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public class TimePlaceholderUtilsTest {
|
|||
|
||||
@Before
|
||||
public void init() {
|
||||
date = DateUtils.parse("20170101010101", "yyyyMMddHHmmss");
|
||||
date = DateUtils.parse("20170101010101", "yyyyMMddHHmmss", null);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ 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.JsonFormat;
|
||||
|
||||
@TableName("t_ds_audit_log")
|
||||
public class AuditLog {
|
||||
|
|
@ -63,7 +62,6 @@ public class AuditLog {
|
|||
/**
|
||||
* operation time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date time;
|
||||
|
||||
public Integer getUserId() {
|
||||
|
|
|
|||
|
|
@ -32,12 +32,10 @@ public class CycleDependency {
|
|||
/**
|
||||
* last schedule time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date lastScheduleTime;
|
||||
/**
|
||||
* expiration time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date expirationTime;
|
||||
/**
|
||||
* cycle enum
|
||||
|
|
|
|||
|
|
@ -68,13 +68,11 @@ public class DataSource {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public DataSource() {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ 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.JsonFormat;
|
||||
|
||||
@TableName("t_ds_dq_comparison_type")
|
||||
public class DqComparisonType implements Serializable {
|
||||
|
|
@ -62,13 +61,11 @@ public class DqComparisonType implements Serializable {
|
|||
* create_time
|
||||
*/
|
||||
@TableField(value = "create_time")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
/**
|
||||
* update_time
|
||||
*/
|
||||
@TableField(value = "update_time")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -147,13 +147,11 @@ public class DqExecuteResult implements Serializable {
|
|||
* create_time
|
||||
*/
|
||||
@TableField(value = "create_time")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
/**
|
||||
* update_time
|
||||
*/
|
||||
@TableField(value = "update_time")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ 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.JsonFormat;
|
||||
|
||||
/**
|
||||
* RuleExecuteSql
|
||||
|
|
@ -67,13 +66,11 @@ public class DqRuleExecuteSql implements Serializable {
|
|||
* create_time
|
||||
*/
|
||||
@TableField(value = "create_time")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
/**
|
||||
* update_time
|
||||
*/
|
||||
@TableField(value = "update_time")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ 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.JsonFormat;
|
||||
|
||||
/**
|
||||
* RuleInputEntry
|
||||
|
|
@ -121,13 +120,11 @@ public class DqRuleInputEntry implements Serializable {
|
|||
* create_time
|
||||
*/
|
||||
@TableField(value = "create_time")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
/**
|
||||
* update_time
|
||||
*/
|
||||
@TableField(value = "update_time")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ 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.JsonFormat;
|
||||
|
||||
@TableName("t_ds_dq_task_statistics_value")
|
||||
public class DqTaskStatisticsValue implements Serializable {
|
||||
|
|
@ -82,19 +81,16 @@ public class DqTaskStatisticsValue implements Serializable {
|
|||
* data time
|
||||
*/
|
||||
@TableField(value = "data_time")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date dataTime;
|
||||
/**
|
||||
* create time
|
||||
*/
|
||||
@TableField(value = "create_time")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@TableField(value = "update_time")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -55,10 +55,8 @@ public class Environment {
|
|||
*/
|
||||
private Integer operator;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -48,10 +48,8 @@ public class EnvironmentWorkerGroupRelation {
|
|||
*/
|
||||
private Integer operator;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -85,13 +85,11 @@ public class ErrorCommand {
|
|||
/**
|
||||
* schedule time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date scheduleTime;
|
||||
|
||||
/**
|
||||
* start time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
|
|
@ -102,7 +100,6 @@ public class ErrorCommand {
|
|||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@ public class MonitorRecord {
|
|||
/**
|
||||
* start date
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date date;
|
||||
|
||||
public Flag getState() {
|
||||
|
|
|
|||
|
|
@ -56,10 +56,8 @@ public class ProcessAlertContent implements Serializable {
|
|||
private Flag recovery;
|
||||
@JsonProperty("runTimes")
|
||||
private Integer runTimes;
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@JsonProperty("processStartTime")
|
||||
private Date processStartTime;
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@JsonProperty("processEndTime")
|
||||
private Date processEndTime;
|
||||
@JsonProperty("processHost")
|
||||
|
|
@ -78,10 +76,8 @@ public class ProcessAlertContent implements Serializable {
|
|||
private Integer retryTimes;
|
||||
@JsonProperty("taskState")
|
||||
private ExecutionStatus taskState;
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@JsonProperty("taskStartTime")
|
||||
private Date taskStartTime;
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@JsonProperty("taskEndTime")
|
||||
private Date taskEndTime;
|
||||
@JsonProperty("taskHost")
|
||||
|
|
|
|||
|
|
@ -100,13 +100,11 @@ public class ProcessDefinition {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ public class ProcessDefinitionLog extends ProcessDefinition {
|
|||
/**
|
||||
* operateTime
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date operateTime;
|
||||
|
||||
public ProcessDefinitionLog() {
|
||||
|
|
|
|||
|
|
@ -70,13 +70,11 @@ public class ProcessInstance {
|
|||
/**
|
||||
* start time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
* end time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date endTime;
|
||||
|
||||
/**
|
||||
|
|
@ -137,13 +135,11 @@ public class ProcessInstance {
|
|||
/**
|
||||
* schedule time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date scheduleTime;
|
||||
|
||||
/**
|
||||
* command start time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date commandStartTime;
|
||||
|
||||
/**
|
||||
|
|
@ -252,7 +248,6 @@ public class ProcessInstance {
|
|||
/**
|
||||
* re-start time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date restartTime;
|
||||
|
||||
public ProcessInstance() {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ import java.util.Objects;
|
|||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
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.JsonSerialize;
|
||||
|
||||
|
|
@ -97,13 +96,11 @@ public class ProcessTaskRelation {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public ProcessTaskRelation() {
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ public class ProcessTaskRelationLog extends ProcessTaskRelation {
|
|||
/**
|
||||
* operate time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date operateTime;
|
||||
|
||||
public ProcessTaskRelationLog() {
|
||||
|
|
|
|||
|
|
@ -46,12 +46,10 @@ public class Queue {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date createTime;
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -82,13 +82,11 @@ public class Resource {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public Resource() {
|
||||
|
|
|
|||
|
|
@ -53,13 +53,11 @@ public class ResourcesUser {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -66,13 +66,11 @@ public class Schedule {
|
|||
/**
|
||||
* schedule start time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
* schedule end time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date endTime;
|
||||
|
||||
/**
|
||||
|
|
@ -99,13 +97,11 @@ public class Schedule {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ public class Session {
|
|||
/**
|
||||
* last login time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date lastLoginTime;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -45,10 +45,8 @@ public class TaskAlertContent implements Serializable {
|
|||
private String processInstanceName;
|
||||
@JsonProperty("state")
|
||||
private ExecutionStatus state;
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@JsonProperty("startTime")
|
||||
private Date startTime;
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@JsonProperty("endTime")
|
||||
private Date endTime;
|
||||
@JsonProperty("host")
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ 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.JsonFormat;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
|
|
@ -180,13 +179,11 @@ public class TaskDefinition {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ public class TaskDefinitionLog extends TaskDefinition {
|
|||
/**
|
||||
* operate time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date operateTime;
|
||||
|
||||
public TaskDefinitionLog() {
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ import java.util.Date;
|
|||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* Task Group
|
||||
|
|
@ -60,12 +59,10 @@ public class TaskGroup implements Serializable {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
/**
|
||||
* project Id
|
||||
|
|
|
|||
|
|
@ -89,12 +89,10 @@ public class TaskGroupQueue implements Serializable {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public TaskGroupQueue() {
|
||||
|
|
|
|||
|
|
@ -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.JSONUtils;
|
||||
|
||||
import org.apache.commons.lang3.SerializationUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
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.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
|
||||
/**
|
||||
|
|
@ -100,25 +97,21 @@ public class TaskInstance implements Serializable {
|
|||
/**
|
||||
* task first submit time.
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date firstSubmitTime;
|
||||
|
||||
/**
|
||||
* task submit time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date submitTime;
|
||||
|
||||
/**
|
||||
* task start time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
* task end time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date endTime;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -52,13 +52,11 @@ public class TaskMainInfo {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date taskCreateTime;
|
||||
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date taskUpdateTime;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -48,13 +48,11 @@ public class TaskRecord {
|
|||
/**
|
||||
* start date
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
* end date
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date endTime;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -67,12 +67,10 @@ public class Tenant {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date createTime;
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -53,13 +53,11 @@ public class UDFUser {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -90,13 +90,11 @@ public class UdfFunc {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -104,13 +104,11 @@ public class User {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -38,10 +38,8 @@ public class WorkerGroup {
|
|||
|
||||
private String addrList;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
@TableField(exist = false)
|
||||
|
|
|
|||
|
|
@ -51,13 +51,11 @@ public class WorkerServer {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* last heart beat time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date lastHeartbeatTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -59,4 +59,9 @@ public final class Constants {
|
|||
public static final String APPEND = "append";
|
||||
|
||||
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";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.SerializationFeature.FAIL_ON_EMPTY_BEANS;
|
||||
|
||||
import org.apache.dolphinscheduler.data.quality.Constants;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
|
|
@ -49,7 +52,8 @@ public class JsonUtils {
|
|||
.configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)
|
||||
.configure(REQUIRE_SETTERS_FOR_GETTERS, true)
|
||||
.configure(FAIL_ON_EMPTY_BEANS,false)
|
||||
.setTimeZone(TimeZone.getDefault());
|
||||
.setTimeZone(TimeZone.getDefault())
|
||||
.setDateFormat(new SimpleDateFormat(Constants.YYYY_MM_DD_HH_MM_SS));
|
||||
|
||||
private JsonUtils() {
|
||||
throw new UnsupportedOperationException("Construct JSONUtils");
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@ import org.apache.dolphinscheduler.server.master.runner.FailoverExecuteThread;
|
|||
import org.apache.dolphinscheduler.server.master.runner.MasterSchedulerService;
|
||||
import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
|
||||
|
||||
import java.util.TimeZone;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
||||
import org.quartz.Scheduler;
|
||||
|
|
@ -44,6 +46,7 @@ import org.quartz.SchedulerException;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cache.annotation.EnableCaching;
|
||||
|
|
@ -101,6 +104,9 @@ public class MasterServer implements IStoppable {
|
|||
@Autowired
|
||||
private LoggerRequestProcessor loggerRequestProcessor;
|
||||
|
||||
@Value("${spring.jackson.time-zone:UTC}")
|
||||
private String timezone;
|
||||
|
||||
public static void main(String[] args) {
|
||||
Thread.currentThread().setName(Constants.THREAD_NAME_MASTER_SERVER);
|
||||
SpringApplication.run(MasterServer.class);
|
||||
|
|
@ -111,6 +117,8 @@ public class MasterServer implements IStoppable {
|
|||
*/
|
||||
@PostConstruct
|
||||
public void run() throws SchedulerException {
|
||||
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
|
||||
|
||||
// init remoting server
|
||||
NettyServerConfig serverConfig = new NettyServerConfig();
|
||||
serverConfig.setListenPort(masterConfig.getListenPort());
|
||||
|
|
|
|||
|
|
@ -49,13 +49,11 @@ public class TaskResponseEvent {
|
|||
/**
|
||||
* start time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
* end time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date endTime;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -706,7 +706,7 @@ public class WorkflowExecuteThread {
|
|||
if (cmdParam.containsKey(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.setTaskDependType(processInstance.getTaskDependType());
|
||||
command.setFailureStrategy(processInstance.getFailureStrategy());
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.google.auto.service.AutoService;
|
||||
|
||||
/**
|
||||
|
|
@ -61,7 +60,6 @@ public class DependentTaskProcessor extends BaseTaskProcessor {
|
|||
/**
|
||||
* dependent date
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date dependentDate;
|
||||
|
||||
DependResult result;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,9 @@ spring:
|
|||
banner-mode: off
|
||||
application:
|
||||
name: master-server
|
||||
jackson:
|
||||
time-zone: UTC
|
||||
date-format: "yyyy-MM-dd HH:mm:ss"
|
||||
cache:
|
||||
# default enable cache, you can disable by `type: none`
|
||||
type: none
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.TimeZone;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
|
@ -69,6 +70,7 @@ import javax.annotation.PostConstruct;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
|
||||
|
|
@ -138,6 +140,14 @@ public class PythonGatewayServer extends SpringBootServletInitializer {
|
|||
@Autowired
|
||||
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
|
||||
private final User dummyAdminUser = new User() {
|
||||
{
|
||||
|
|
|
|||
|
|
@ -42,7 +42,6 @@ public class TaskExecuteAckCommand implements Serializable {
|
|||
/**
|
||||
* startTime
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -22,8 +22,6 @@ import org.apache.dolphinscheduler.common.utils.JSONUtils;
|
|||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* execute task response command
|
||||
*/
|
||||
|
|
@ -56,7 +54,6 @@ public class TaskExecuteResponseCommand implements Serializable {
|
|||
/**
|
||||
* end time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date endTime;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ public class LogUtils {
|
|||
.map(TaskLogDiscriminator::getLogBase)
|
||||
.map(e -> Paths.get(e)
|
||||
.toAbsolutePath()
|
||||
.resolve(DateUtils.format(firstSubmitTime,Constants.YYYYMMDD))
|
||||
.resolve(DateUtils.format(firstSubmitTime,Constants.YYYYMMDD, null))
|
||||
.resolve(taskLogFileName))
|
||||
.map(Path::toString)
|
||||
.orElse("");
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ public class LogUtilsTest {
|
|||
|
||||
Path logPath = Paths.get(".").toAbsolutePath().getParent()
|
||||
.resolve(logBase)
|
||||
.resolve(DateUtils.format(firstSubmitTime, Constants.YYYYMMDD))
|
||||
.resolve(DateUtils.format(firstSubmitTime, Constants.YYYYMMDD, null))
|
||||
.resolve("1_1-100-1000.log");
|
||||
Assert.assertEquals(logPath.toString(), LogUtils.getTaskLogPath(taskExecutionContext));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
@ -53,13 +53,11 @@ public class TaskExecutionContext implements Serializable {
|
|||
/**
|
||||
* task first submit time.
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date firstSubmitTime;
|
||||
|
||||
/**
|
||||
* task start time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
|
|
@ -116,7 +114,6 @@ public class TaskExecutionContext implements Serializable {
|
|||
/**
|
||||
* process instance schedule time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date scheduleTime;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -23,8 +23,6 @@ import org.apache.dolphinscheduler.spi.task.Property;
|
|||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* to master/worker task transport
|
||||
*/
|
||||
|
|
@ -43,13 +41,11 @@ public class TaskRequest {
|
|||
/**
|
||||
* task first submit time.
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date firstSubmitTime;
|
||||
|
||||
/**
|
||||
* task start time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
|
|
@ -96,7 +92,6 @@ public class TaskRequest {
|
|||
/**
|
||||
* process instance schedule time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date scheduleTime;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -83,13 +83,11 @@ public class UdfFuncRequest {
|
|||
/**
|
||||
* create time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* update time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -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 java.io.IOException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
|
@ -62,7 +63,8 @@ public class JSONUtils {
|
|||
.configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true)
|
||||
.configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, 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() {
|
||||
throw new UnsupportedOperationException("Construct JSONUtils");
|
||||
|
|
|
|||
|
|
@ -19,14 +19,29 @@ package org.apache.dolphinscheduler;
|
|||
|
||||
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.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class StandaloneServer {
|
||||
|
||||
@Value("${spring.jackson.time-zone:UTC}")
|
||||
private String timezone;
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
final TestingServer server = new TestingServer(true);
|
||||
System.setProperty("registry.zookeeper.connect-string", server.getConnectString());
|
||||
SpringApplication.run(StandaloneServer.class, args);
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void run() {
|
||||
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,9 @@
|
|||
spring:
|
||||
application:
|
||||
name: standalone-server
|
||||
jackson:
|
||||
time-zone: UTC
|
||||
date-format: "yyyy-MM-dd HH:mm:ss"
|
||||
main:
|
||||
banner-mode: off
|
||||
cache:
|
||||
|
|
@ -59,8 +62,6 @@ spring:
|
|||
org.quartz.scheduler.makeSchedulerThreadDaemon: true
|
||||
org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
|
||||
org.quartz.jobStore.clusterCheckinInterval: 5000
|
||||
jackson:
|
||||
time-zone: GMT+8
|
||||
servlet:
|
||||
multipart:
|
||||
max-file-size: 1024MB
|
||||
|
|
|
|||
|
|
@ -55,12 +55,10 @@ public class DqRuleExecuteSql implements Serializable {
|
|||
/**
|
||||
* create_time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
/**
|
||||
* update_time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@ import org.apache.dolphinscheduler.spi.task.dq.enums.ValueType;
|
|||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* RuleInputEntry
|
||||
*/
|
||||
|
|
@ -98,12 +96,10 @@ public class DqRuleInputEntry implements Serializable {
|
|||
/**
|
||||
* create_time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
/**
|
||||
* update_time
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTime;
|
||||
|
||||
public int getId() {
|
||||
|
|
|
|||
|
|
@ -274,7 +274,8 @@
|
|||
schedule: JSON.stringify({
|
||||
startTime: this.scheduleTime[0],
|
||||
endTime: this.scheduleTime[1],
|
||||
crontab: this.crontab
|
||||
crontab: this.crontab,
|
||||
timezoneId: this.timezoneId
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,12 +44,14 @@ import org.apache.commons.collections4.CollectionUtils;
|
|||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
|
|
@ -122,6 +124,9 @@ public class WorkerServer implements IStoppable {
|
|||
@Autowired
|
||||
private LoggerRequestProcessor loggerRequestProcessor;
|
||||
|
||||
@Value("${spring.jackson.time-zone:UTC}")
|
||||
private String timezone;
|
||||
|
||||
/**
|
||||
* worker server startup, not use web service
|
||||
*
|
||||
|
|
@ -137,6 +142,8 @@ public class WorkerServer implements IStoppable {
|
|||
*/
|
||||
@PostConstruct
|
||||
public void run() {
|
||||
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
|
||||
|
||||
// init remoting server
|
||||
NettyServerConfig serverConfig = new NettyServerConfig();
|
||||
serverConfig.setListenPort(workerConfig.getListenPort());
|
||||
|
|
|
|||
|
|
@ -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
|
||||
if (taskExecutionContext.getScheduleTime() != null) {
|
||||
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();
|
||||
p.setValue(dateTime);
|
||||
p.setProp(Constants.PARAMETER_DATETIME);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,9 @@ spring:
|
|||
banner-mode: off
|
||||
application:
|
||||
name: worker-server
|
||||
jackson:
|
||||
time-zone: UTC
|
||||
date-format: "yyyy-MM-dd HH:mm:ss"
|
||||
datasource:
|
||||
driver-class-name: org.postgresql.Driver
|
||||
url: jdbc:postgresql://127.0.0.1:5432/dolphinscheduler
|
||||
|
|
|
|||
|
|
@ -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 SPRING_JACKSON_TIME_ZONE=${SPRING_JACKSON_TIME_ZONE:-UTC}
|
||||
export DATABASE=${DATABASE:-postgresql}
|
||||
export SPRING_PROFILES_ACTIVE=${DATABASE}
|
||||
export SPRING_DATASOURCE_DRIVER_CLASS_NAME
|
||||
|
|
|
|||
Loading…
Reference in New Issue