From af352256e95de640ff54ec4149b686042c9a6797 Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 22 May 2025 12:25:17 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=BD=94=EB=A3=A8=ED=8B=B4=20=EB=82=B4?= =?UTF-8?q?=20=ED=8A=B8=EB=9E=9C=EC=9E=AD=EC=85=98=20=EA=B0=84=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=95=88=20=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=20=ED=95=B4=EA=B2=B0=20-=20=EA=B0=81=20=ED=8A=B8=EB=9E=9C?= =?UTF-8?q?=EC=9E=AD=EC=85=98=EC=9D=84=20TransactionTemplate=20=EB=B8=94?= =?UTF-8?q?=EB=A1=9D=EC=9C=BC=EB=A1=9C=20=EB=B6=84=EB=A6=AC=ED=95=98?= =?UTF-8?q?=EC=97=AC=20=EC=BB=A4=EB=B0=8B=20=EC=8B=9C=EC=A0=90=20=EB=AA=85?= =?UTF-8?q?=ED=99=95=ED=99=94=20-=20=EB=91=90=20=EB=B2=88=EC=A7=B8=20?= =?UTF-8?q?=ED=8A=B8=EB=9E=9C=EC=9E=AD=EC=85=98=EC=97=90=EC=84=9C=20entity?= =?UTF-8?q?Manager.clear()=20=ED=98=B8=EC=B6=9C=EB=A1=9C=201=EC=B0=A8=20?= =?UTF-8?q?=EC=BA=90=EC=8B=9C=20=EB=AC=B4=EC=8B=9C=20-=20CoroutineExceptio?= =?UTF-8?q?nHandler=20=EC=B6=94=EA=B0=80=EB=A1=9C=20=EB=B9=84=EB=8F=99?= =?UTF-8?q?=EA=B8=B0=20=EC=98=88=EC=99=B8=20=EB=A1=9C=EA=B9=85=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20-=20@PreDestroy=20=EC=B6=94=EA=B0=80=EB=A1=9C=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=A2=85=EB=A3=8C=20=EC=8B=9C=20?= =?UTF-8?q?CoroutineScope=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/useraction/UserActionService.kt | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/useraction/UserActionService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/useraction/UserActionService.kt index 1025369..cd2bf7e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/useraction/UserActionService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/useraction/UserActionService.kt @@ -1,7 +1,9 @@ package kr.co.vividnext.sodalive.useraction +import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import kr.co.vividnext.sodalive.content.order.OrderRepository import kr.co.vividnext.sodalive.fcm.FcmService @@ -14,6 +16,8 @@ import org.slf4j.LoggerFactory import org.springframework.stereotype.Service import org.springframework.transaction.support.TransactionTemplate import java.time.LocalDateTime +import javax.annotation.PreDestroy +import javax.persistence.EntityManager @Service class UserActionService( @@ -24,10 +28,15 @@ class UserActionService( private val memberPointRepository: MemberPointRepository, private val transactionTemplate: TransactionTemplate, - private val fcmService: FcmService + private val fcmService: FcmService, + private val entityManager: EntityManager ) { - private val coroutineScope = CoroutineScope(Dispatchers.IO) + private val coroutineScope = CoroutineScope( + Dispatchers.IO + CoroutineExceptionHandler { _, e -> + logger.error("포인트 지급 또는 알림 실패: ${e.message}") + } + ) fun recordAction( memberId: Long, @@ -53,6 +62,7 @@ class UserActionService( if (isAuth) { try { transactionTemplate.execute { + entityManager.clear() val policy = policyRepository.findByActionTypeAndIsActiveTrue(actionType, now) if (policy != null) { val policyType = policy.policyType @@ -146,6 +156,11 @@ class UserActionService( } } + @PreDestroy + fun onDestroy() { + coroutineScope.cancel("UserActionService 종료") + } + companion object { private val logger = LoggerFactory.getLogger(UserActionService::class.java) }