From 2cb7327a78f68bc2981fcecc697612f3d50032f0 Mon Sep 17 00:00:00 2001 From: pyh_uestc <664254320@qq.com> Date: Fri, 24 May 2019 17:16:01 +0800 Subject: [PATCH] fix thread-unsafe about SimpleDateFormat --- .../alicloud/sms/base/DefaultAlicomMessagePuller.java | 5 ++--- .../cloud/alicloud/sms/base/TokenGetterForAlicom.java | 11 ++++++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java index 587dd309..dec7d9e0 100755 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java @@ -15,7 +15,6 @@ */ package org.springframework.cloud.alicloud.sms.base; -import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; @@ -159,9 +158,9 @@ public class DefaultAlicomMessagePuller { if (!polling) { popMsg = queue.popMessage(); if (debugLogOpen) { - ThreadLocal format = new ThreadLocal(){ + ThreadLocal format = new ThreadLocal(){ @Override - protected DateFormat initialValue() { + protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } }; diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java index 2b44e63e..6f410cd3 100755 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java @@ -78,8 +78,13 @@ public class TokenGetterForAlicom { private TokenForAlicom getTokenFromRemote(String messageType) throws ClientException, ParseException { - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); + ThreadLocal df = new ThreadLocal(){ + @Override + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } + }; + df.get().setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); QueryTokenForMnsQueueRequest request = new QueryTokenForMnsQueueRequest(); request.setAcceptFormat(FormatType.JSON); request.setMessageType(messageType); @@ -94,7 +99,7 @@ public class TokenGetterForAlicom { TokenForAlicom token = new TokenForAlicom(); String timeStr = dto.getExpireTime(); token.setMessageType(messageType); - token.setExpireTime(df.parse(timeStr).getTime()); + token.setExpireTime(df.get().parse(timeStr).getTime()); token.setToken(dto.getSecurityToken()); token.setTempAccessKeyId(dto.getAccessKeyId()); token.setTempAccessKeySecret(dto.getAccessKeySecret());