diff --git a/inlong-common/src/main/java/org/apache/inlong/common/pojo/sort/dataflow/field/format/DateFormatInfo.java b/inlong-common/src/main/java/org/apache/inlong/common/pojo/sort/dataflow/field/format/DateFormatInfo.java index 5c2694cf59..48f3161635 100644 --- a/inlong-common/src/main/java/org/apache/inlong/common/pojo/sort/dataflow/field/format/DateFormatInfo.java +++ b/inlong-common/src/main/java/org/apache/inlong/common/pojo/sort/dataflow/field/format/DateFormatInfo.java @@ -50,11 +50,15 @@ public class DateFormatInfo implements BasicFormatInfo { @Nullable private final SimpleDateFormat simpleDateFormat; + @JsonIgnore + @Nullable + private final ThreadLocal threadLocal; + @JsonCreator public DateFormatInfo( @JsonProperty(FIELD_FORMAT) @Nonnull String format) { this.format = format; - + this.threadLocal = new ThreadLocal<>(); if (!format.equals("SECONDS") && !format.equals("MILLIS") && !format.equals("MICROS") @@ -80,6 +84,17 @@ public DateTypeInfo getTypeInfo() { return DateTypeInfo.INSTANCE; } + private SimpleDateFormat get() { + if (simpleDateFormat == null) { + throw new IllegalStateException(); + } + SimpleDateFormat local = threadLocal.get(); + if (local == null) { + threadLocal.set((SimpleDateFormat) simpleDateFormat.clone()); + } + return threadLocal.get(); + } + @Override public String serialize(Date date) { switch (format) { @@ -98,11 +113,7 @@ public String serialize(Date date) { return Long.toString(seconds); } default: { - if (simpleDateFormat == null) { - throw new IllegalStateException(); - } - - return simpleDateFormat.format(date); + return get().format(date); } } } @@ -126,11 +137,7 @@ public Date deserialize(String text) throws ParseException { return new Date(millis); } default: { - if (simpleDateFormat == null) { - throw new IllegalStateException(); - } - - java.util.Date jDate = simpleDateFormat.parse(text.trim()); + java.util.Date jDate = get().parse(text.trim()); return new Date(jDate.getTime()); } } diff --git a/inlong-common/src/main/java/org/apache/inlong/common/pojo/sort/dataflow/field/format/TimeFormatInfo.java b/inlong-common/src/main/java/org/apache/inlong/common/pojo/sort/dataflow/field/format/TimeFormatInfo.java index 65101cb7bd..8a83592ef4 100644 --- a/inlong-common/src/main/java/org/apache/inlong/common/pojo/sort/dataflow/field/format/TimeFormatInfo.java +++ b/inlong-common/src/main/java/org/apache/inlong/common/pojo/sort/dataflow/field/format/TimeFormatInfo.java @@ -50,6 +50,9 @@ public class TimeFormatInfo implements BasicFormatInfo