Make SimpleDateFormat thread safe
Change-Id: I36c7edea69eff13b1bcc88bb80001f17f4cbc4ac
(cherry picked from commit 851f936db7b8ca841df1fc3c87a7d1c02b377c54)
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java
index 621d545..134a456 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java
@@ -31,16 +31,27 @@
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
+import java.util.function.Supplier;
@Singleton
class SQLQueryMaker implements QueryMaker {
private static final int TWO = 2;
private static final String TIME_ONE = "t1";
private static final String TIME_TWO = "t2";
- private static final DateFormat DATE_TIME_FORMAT = new SimpleDateFormat(
- "yyyy-MM-dd HH:mm:ss");
- private static final DateFormat DATE_ONLY_FORMAT = new SimpleDateFormat(
- "yyyy-MM-dd");
+ private static final ThreadLocal<DateFormat> DATE_TIME_FORMAT =
+ ThreadLocal.withInitial(new Supplier<DateFormat>() {
+ @Override
+ public DateFormat get() {
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ }
+ });
+ private static final ThreadLocal<DateFormat> DATE_ONLY_FORMAT =
+ ThreadLocal.withInitial(new Supplier<DateFormat>() {
+ @Override
+ public DateFormat get() {
+ return new SimpleDateFormat("yyyy-MM-dd");
+ }
+ });
private final int returnLimit;
@@ -63,8 +74,8 @@
}
return String.format(
"SELECT * FROM %s WHERE %s BETWEEN '%s' and '%s' LIMIT %d", TABLE_NAME,
- DATE_ENTRY, DATE_TIME_FORMAT.format(dates[0]),
- DATE_TIME_FORMAT.format(dates[1]), returnLimit);
+ DATE_ENTRY, DATE_TIME_FORMAT.get().format(dates[0]),
+ DATE_TIME_FORMAT.get().format(dates[1]), returnLimit);
}
@Override
@@ -93,9 +104,9 @@
private Date parseDate(String date) throws ParseException {
Date parsedDate;
try {
- parsedDate = DATE_TIME_FORMAT.parse(date);
+ parsedDate = DATE_TIME_FORMAT.get().parse(date);
} catch (ParseException e) {
- parsedDate = DATE_ONLY_FORMAT.parse(date);
+ parsedDate = DATE_ONLY_FORMAT.get().parse(date);
}
return parsedDate;
}