property 오류 수정
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user