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; }