property 오류 수정

This commit is contained in:
pksup
2026-01-13 16:41:43 +09:00
parent 77b31f6fae
commit 4640b31f7f
3 changed files with 30 additions and 32 deletions
@@ -16,6 +16,7 @@ import com.eactive.eai.custom.statistics.dto.TransactionEvent;
import com.eactive.eai.data.entity.custom.statistics.ApiStatsHour;
import com.eactive.eai.data.entity.custom.statistics.ApiStatsMinute;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
@@ -24,6 +25,7 @@ import lombok.extern.slf4j.Slf4j;
* - Thread-safe한 ConcurrentHashMap 사용
*/
@Service
@RequiredArgsConstructor
public class ApiStatsCollector {
private static Logger log = Logger.getLogger(Logger.LOGGER_DEFAULT);
@@ -46,6 +48,8 @@ public class ApiStatsCollector {
*/
private final ConcurrentHashMap<HourStatsKey, HourStatsAggregator> hourAggregators = new ConcurrentHashMap<>();
private final ApiStatsConfig apiStatsConfig;
/**
* 거래 이벤트 기록
*
@@ -63,8 +67,8 @@ public class ApiStatsCollector {
*/
public void recordEvent(TransactionEvent event, LocalDateTime eventTime) {
// 통계 수집 비활성화 체크 (분단위 또는 시간별 중 하나라도 활성화되어야 함)
boolean minuteEnabled = ApiStatsConfig.isMinuteEnabled();
boolean hourEnabled = ApiStatsConfig.isHourEnabled();
boolean minuteEnabled = apiStatsConfig.isMinuteEnabled();
boolean hourEnabled = apiStatsConfig.isHourEnabled();
if (!minuteEnabled && !hourEnabled) {
if (log.isDebugEnabled()) {
@@ -1,17 +1,17 @@
package com.eactive.eai.custom.statistics.config;
import java.util.Properties;
import org.springframework.stereotype.Component;
import com.eactive.eai.common.property.PropManager;
import com.eactive.eai.common.util.Logger;
import lombok.experimental.UtilityClass;
import lombok.RequiredArgsConstructor;
/**
* API 통계 설정 관리
* - PropManager를 통해 운영 중 동적 변경 가능한 설정값 관리
* API 통계 설정 관리 - PropManager를 통해 운영 중 동적 변경 가능한 설정값 관리
*/
@UtilityClass
@Component
@RequiredArgsConstructor
public class ApiStatsConfig {
private static final Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
@@ -24,15 +24,14 @@ public class ApiStatsConfig {
private static final boolean DEFAULT_MINUTE_ENABLED = true;
private static final boolean DEFAULT_HOUR_ENABLED = true;
private final PropManager propManager;
/**
* 통계 수집 활성화 여부 (전체 ON/OFF)
* - true: 통계 수집 활성화 (기본값)
* - false: 통계 수집 비활성화
* 통계 수집 활성화 여부 (전체 ON/OFF) - true: 통계 수집 활성화 (기본값) - false: 통계 수집 비활성화
*/
public static boolean isEnabled() {
public boolean isEnabled() {
try {
Properties prop = PropManager.getInstance().getProperties(GROUP_NAME);
String value = prop.getProperty("enabled", String.valueOf(DEFAULT_ENABLED));
String value = propManager.getProperty(GROUP_NAME, "enabled", String.valueOf(DEFAULT_ENABLED));
return Boolean.parseBoolean(value);
} catch (Exception e) {
logger.debug("Failed to get enabled from PropManager, using default: " + DEFAULT_ENABLED);
@@ -41,18 +40,16 @@ public class ApiStatsConfig {
}
/**
* 분단위 통계 수집 활성화 여부
* - true: 분단위 통계 수집 활성화 (기본값)
* - false: 분단위 통계 수집 비활성화
* - 전체 enabled가 false이면 이 설정과 무관하게 비활성화됨
* 분단위 통계 수집 활성화 여부 - true: 분단위 통계 수집 활성화 (기본값) - false: 분단위 통계 수집 비활성화 - 전체
* enabled가 false이면 이 설정과 무관하게 비활성화됨
*/
public static boolean isMinuteEnabled() {
public boolean isMinuteEnabled() {
if (!isEnabled()) {
return false;
}
try {
Properties prop = PropManager.getInstance().getProperties(GROUP_NAME);
String value = prop.getProperty("minute.enabled", String.valueOf(DEFAULT_MINUTE_ENABLED));
String value = propManager.getProperty(GROUP_NAME, "minute.enabled",
String.valueOf(DEFAULT_MINUTE_ENABLED));
return Boolean.parseBoolean(value);
} catch (Exception e) {
logger.debug("Failed to get minute.enabled from PropManager, using default: " + DEFAULT_MINUTE_ENABLED);
@@ -61,18 +58,15 @@ public class ApiStatsConfig {
}
/**
* 시간별 통계 수집 활성화 여부
* - true: 시간별 통계 수집 활성화 (기본값)
* - false: 시간별 통계 수집 비활성화
* - 전체 enabled가 false이면 이 설정과 무관하게 비활성화됨
* 시간별 통계 수집 활성화 여부 - true: 시간별 통계 수집 활성화 (기본값) - false: 시간별 통계 수집 비활성화 - 전체
* enabled가 false이면 이 설정과 무관하게 비활성화됨
*/
public static boolean isHourEnabled() {
public boolean isHourEnabled() {
if (!isEnabled()) {
return false;
}
try {
Properties prop = PropManager.getInstance().getProperties(GROUP_NAME);
String value = prop.getProperty("hour.enabled", String.valueOf(DEFAULT_HOUR_ENABLED));
String value = propManager.getProperty(GROUP_NAME, "hour.enabled", String.valueOf(DEFAULT_HOUR_ENABLED));
return Boolean.parseBoolean(value);
} catch (Exception e) {
logger.debug("Failed to get hour.enabled from PropManager, using default: " + DEFAULT_HOUR_ENABLED);
@@ -83,7 +77,7 @@ public class ApiStatsConfig {
/**
* 설정값 로깅 (초기화 시)
*/
public static void logCurrentConfig() {
public void logCurrentConfig() {
logger.info("ApiStatsConfig] enabled = " + isEnabled());
logger.info("ApiStatsConfig] minute.enabled = " + isMinuteEnabled());
logger.info("ApiStatsConfig] hour.enabled = " + isHourEnabled());
@@ -17,7 +17,6 @@ import com.eactive.eai.data.entity.custom.statistics.ApiStatsHour;
import com.eactive.eai.data.entity.custom.statistics.ApiStatsMinute;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* API 통계 스케줄러
@@ -33,6 +32,7 @@ public class ApiStatsScheduler {
private final ApiStatsCollector collector;
private final ApiStatsMinuteLogger minuteLogger;
private final ApiStatsHourLogger hourLogger;
private final ApiStatsConfig apiStatsConfig;
// 이전 설정값 추적 (설정 변경 시 flush용)
private volatile boolean previousMinuteEnabled = true;
@@ -44,7 +44,7 @@ public class ApiStatsScheduler {
@PostConstruct
public void init() {
log.info("ApiStatsScheduler initialized");
ApiStatsConfig.logCurrentConfig();
apiStatsConfig.logCurrentConfig();
}
/**
@@ -54,7 +54,7 @@ public class ApiStatsScheduler {
*/
@Scheduled(cron = "10 * * * * ?")
public void saveMinuteStats() {
boolean currentEnabled = ApiStatsConfig.isMinuteEnabled();
boolean currentEnabled = apiStatsConfig.isMinuteEnabled();
// 설정이 enabled → disabled로 변경된 경우: 남은 데이터 모두 flush
if (previousMinuteEnabled && !currentEnabled) {
@@ -122,7 +122,7 @@ public class ApiStatsScheduler {
*/
@Scheduled(cron = "0 10 * * * ?")
public void saveHourStats() {
boolean currentEnabled = ApiStatsConfig.isHourEnabled();
boolean currentEnabled = apiStatsConfig.isHourEnabled();
// 설정이 enabled → disabled로 변경된 경우: 남은 데이터 모두 flush
if (previousHourEnabled && !currentEnabled) {