From 280cc739282de0f283520bc11f9dfbed26522019 Mon Sep 17 00:00:00 2001 From: LeeGeonHo Date: Wed, 27 Nov 2024 21:17:15 +0900 Subject: [PATCH] =?UTF-8?q?Refactor/graceful=20shutdown=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20(#92)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app-api/src/main/resources/application.yml | 3 +++ .../external/api/ApiCounter.java | 20 ++++--------------- .../external/api/CircuitBreakerAspect.java | 7 ++----- .../src/main/resources/application.yml | 6 ++++++ .../external/api/ApiCounterTest.java | 6 +++--- 5 files changed, 18 insertions(+), 24 deletions(-) diff --git a/app-api/src/main/resources/application.yml b/app-api/src/main/resources/application.yml index 5fc566f..a93fff8 100644 --- a/app-api/src/main/resources/application.yml +++ b/app-api/src/main/resources/application.yml @@ -29,3 +29,6 @@ cors: allowedOrigins: ${ORIGIN:http://localhost:3000} api-prefix: ${API_PREFIX:/} + +server: + shutdown: graceful diff --git a/app-scheduler/src/main/java/com/parkingcomestrue/external/api/ApiCounter.java b/app-scheduler/src/main/java/com/parkingcomestrue/external/api/ApiCounter.java index 1a7b250..c8160fb 100644 --- a/app-scheduler/src/main/java/com/parkingcomestrue/external/api/ApiCounter.java +++ b/app-scheduler/src/main/java/com/parkingcomestrue/external/api/ApiCounter.java @@ -24,25 +24,13 @@ public ApiCounter(int minTotalCount) { this.isOpened = false; } - public void countUp() { - while (true) { - int expected = getTotalCount(); - int newValue = expected + 1; - if (totalCount.compareAndSet(expected, newValue)) { - return; - } - } + public void totalCountUp() { + totalCount.incrementAndGet(); } public void errorCountUp() { - countUp(); - while (true) { - int expected = getErrorCount(); - int newValue = expected + 1; - if (errorCount.compareAndSet(expected, newValue)) { - return; - } - } + totalCountUp(); + errorCount.incrementAndGet(); } public void reset() { diff --git a/app-scheduler/src/main/java/com/parkingcomestrue/external/api/CircuitBreakerAspect.java b/app-scheduler/src/main/java/com/parkingcomestrue/external/api/CircuitBreakerAspect.java index b22f600..d73f39f 100644 --- a/app-scheduler/src/main/java/com/parkingcomestrue/external/api/CircuitBreakerAspect.java +++ b/app-scheduler/src/main/java/com/parkingcomestrue/external/api/CircuitBreakerAspect.java @@ -27,7 +27,7 @@ public Object around(ProceedingJoinPoint proceedingJoinPoint, CircuitBreaker ann } try { Object result = proceedingJoinPoint.proceed(); - apiCounter.countUp(); + apiCounter.totalCountUp(); return result; } catch (Throwable e) { handleError(annotation, apiCounter); @@ -37,10 +37,7 @@ public Object around(ProceedingJoinPoint proceedingJoinPoint, CircuitBreaker ann private ApiCounter getApiCounter(ProceedingJoinPoint proceedingJoinPoint, int minTotalCount) { Object target = proceedingJoinPoint.getTarget(); - if (!map.containsKey(target)) { - map.put(target, new ApiCounter(minTotalCount)); - } - return map.get(target); + return map.computeIfAbsent(target, key -> new ApiCounter(minTotalCount)); } private void handleError(CircuitBreaker annotation, ApiCounter apiCounter) { diff --git a/app-scheduler/src/main/resources/application.yml b/app-scheduler/src/main/resources/application.yml index f868793..b946e89 100644 --- a/app-scheduler/src/main/resources/application.yml +++ b/app-scheduler/src/main/resources/application.yml @@ -1,6 +1,12 @@ spring: profiles: active: ${PROFILE:dev} + lifecycle: + timeout-per-shutdown-phase: 5m + +server: + shutdown: graceful + # API KEY kakao: key: ${KAKAO_API_KEY:kakao} diff --git a/app-scheduler/src/test/java/com/parkingcomestrue/external/api/ApiCounterTest.java b/app-scheduler/src/test/java/com/parkingcomestrue/external/api/ApiCounterTest.java index b26bd30..f260c0c 100644 --- a/app-scheduler/src/test/java/com/parkingcomestrue/external/api/ApiCounterTest.java +++ b/app-scheduler/src/test/java/com/parkingcomestrue/external/api/ApiCounterTest.java @@ -15,7 +15,7 @@ class ApiCounterTest { ApiCounter apiCounter = new ApiCounter(); for (int i = 0; i < 8; i++) { - apiCounter.countUp(); + apiCounter.totalCountUp(); } for (int i = 0; i < 2; i++) { apiCounter.errorCountUp(); @@ -50,7 +50,7 @@ class ApiCounterTest { } executorService.submit(() -> { try { - apiCounter.countUp(); + apiCounter.totalCountUp(); } finally { latch.countDown(); } @@ -76,7 +76,7 @@ class ApiCounterTest { for (int i = 0; i < threadCount; i++) { executorService.submit(() -> { try { - apiCounter.countUp(); + apiCounter.totalCountUp(); } finally { latch.countDown(); }