트랜잭션 처리 수정 및 공통정보
This commit is contained in:
@@ -4,23 +4,29 @@ import com.caliverse.admin.global.common.code.CommonCode;
|
|||||||
import com.caliverse.admin.global.common.code.ErrorCode;
|
import com.caliverse.admin.global.common.code.ErrorCode;
|
||||||
import com.caliverse.admin.global.common.exception.RestApiException;
|
import com.caliverse.admin.global.common.exception.RestApiException;
|
||||||
import com.caliverse.admin.global.component.transaction.DynamoDBTransactionContext;
|
import com.caliverse.admin.global.component.transaction.DynamoDBTransactionContext;
|
||||||
|
import com.caliverse.admin.global.component.transaction.TransactionIdManager;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.aspectj.lang.ProceedingJoinPoint;
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
import org.aspectj.lang.annotation.Around;
|
import org.aspectj.lang.annotation.Around;
|
||||||
import org.aspectj.lang.annotation.Aspect;
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
||||||
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
|
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
|
||||||
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
|
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
|
||||||
import software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedRequest;
|
import software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedRequest;
|
||||||
|
|
||||||
|
import static com.caliverse.admin.global.common.constants.CommonConstants.TRANSACTION_ID_KEY;
|
||||||
|
|
||||||
@Aspect
|
@Aspect
|
||||||
@Component
|
@Component
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class DynamoDBTransactionAspect {
|
public class DynamoDBTransactionAspect {
|
||||||
private final DynamoDbEnhancedClient enhancedClient;
|
private final DynamoDbEnhancedClient enhancedClient;
|
||||||
|
private final TransactionIdManager transactionIdManager;
|
||||||
|
|
||||||
public DynamoDBTransactionAspect(DynamoDbEnhancedClient enhancedClient) {
|
public DynamoDBTransactionAspect(DynamoDbEnhancedClient enhancedClient, TransactionIdManager transactionIdManager) {
|
||||||
this.enhancedClient = enhancedClient;
|
this.enhancedClient = enhancedClient;
|
||||||
|
this.transactionIdManager = transactionIdManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Around("@annotation(com.caliverse.admin.global.common.annotation.DynamoDBTransaction)")
|
@Around("@annotation(com.caliverse.admin.global.common.annotation.DynamoDBTransaction)")
|
||||||
@@ -28,6 +34,12 @@ public class DynamoDBTransactionAspect {
|
|||||||
TransactWriteItemsEnhancedRequest.Builder transactionBuilder =
|
TransactWriteItemsEnhancedRequest.Builder transactionBuilder =
|
||||||
TransactWriteItemsEnhancedRequest.builder();
|
TransactWriteItemsEnhancedRequest.builder();
|
||||||
|
|
||||||
|
boolean hasExistingTransaction = TransactionSynchronizationManager.hasResource(TRANSACTION_ID_KEY);
|
||||||
|
|
||||||
|
if (!hasExistingTransaction) {
|
||||||
|
transactionIdManager.getCurrentTransactionId();
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 메서드 실행 전 트랜잭션 컨텍스트 설정
|
// 메서드 실행 전 트랜잭션 컨텍스트 설정
|
||||||
DynamoDBTransactionContext.setTransactionBuilder(transactionBuilder);
|
DynamoDBTransactionContext.setTransactionBuilder(transactionBuilder);
|
||||||
@@ -38,7 +50,7 @@ public class DynamoDBTransactionAspect {
|
|||||||
// 트랜잭션 커밋
|
// 트랜잭션 커밋
|
||||||
TransactWriteItemsEnhancedRequest transactionRequest =
|
TransactWriteItemsEnhancedRequest transactionRequest =
|
||||||
DynamoDBTransactionContext.getTransactionBuilder().build();
|
DynamoDBTransactionContext.getTransactionBuilder().build();
|
||||||
if (!transactionRequest.transactWriteItems().isEmpty()) {
|
if (transactionRequest.transactWriteItems() != null && !transactionRequest.transactWriteItems().isEmpty()) {
|
||||||
enhancedClient.transactWriteItems(transactionRequest);
|
enhancedClient.transactWriteItems(transactionRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,6 +66,10 @@ public class DynamoDBTransactionAspect {
|
|||||||
} finally {
|
} finally {
|
||||||
// 트랜잭션 컨텍스트 정리
|
// 트랜잭션 컨텍스트 정리
|
||||||
DynamoDBTransactionContext.clear();
|
DynamoDBTransactionContext.clear();
|
||||||
|
|
||||||
|
if (!hasExistingTransaction && TransactionSynchronizationManager.hasResource(TRANSACTION_ID_KEY)) {
|
||||||
|
TransactionSynchronizationManager.unbindResource(TRANSACTION_ID_KEY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,12 +8,13 @@ import org.aspectj.lang.annotation.Aspect;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
||||||
|
|
||||||
|
import static com.caliverse.admin.global.common.constants.CommonConstants.TRANSACTION_ID_KEY;
|
||||||
|
|
||||||
@Aspect
|
@Aspect
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class TransactionIdAspect {
|
public class TransactionIdAspect {
|
||||||
private final TransactionIdManager transactionIdManager;
|
private final TransactionIdManager transactionIdManager;
|
||||||
private static final String TRANSACTION_ID_KEY = "TRANSACTION_ID";
|
|
||||||
|
|
||||||
@Around("@annotation(org.springframework.transaction.annotation.Transactional)")
|
@Around("@annotation(org.springframework.transaction.annotation.Transactional)")
|
||||||
public Object setTransactionId(ProceedingJoinPoint joinPoint) throws Throwable {
|
public Object setTransactionId(ProceedingJoinPoint joinPoint) throws Throwable {
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ public enum ErrorCode {
|
|||||||
PASSWORD_ERROR("입력된 현재 비밀번호가 틀립니다."),
|
PASSWORD_ERROR("입력된 현재 비밀번호가 틀립니다."),
|
||||||
|
|
||||||
NOT_FOUNT_TEAM("입력한 팀을 찾지 못했습니다."),
|
NOT_FOUNT_TEAM("입력한 팀을 찾지 못했습니다."),
|
||||||
|
NOT_FOUNT_API("요청한 API를 찾지 못했습니다."),
|
||||||
NOT_FOUNT_POSITION( "입력한 직급을 찾지 못했습니다."),
|
NOT_FOUNT_POSITION( "입력한 직급을 찾지 못했습니다."),
|
||||||
NOT_MATCH_USER("이메일 또는 비밀번호가 일치하지않습니다."),
|
NOT_MATCH_USER("이메일 또는 비밀번호가 일치하지않습니다."),
|
||||||
DUPLICATED_EMAIL("동일한 이메일이 존재합니다."),
|
DUPLICATED_EMAIL("동일한 이메일이 존재합니다."),
|
||||||
@@ -49,6 +50,8 @@ public enum ErrorCode {
|
|||||||
|
|
||||||
ERROR_API_CALL("API 호출에 실패하였습니다."),
|
ERROR_API_CALL("API 호출에 실패하였습니다."),
|
||||||
|
|
||||||
|
ERROR_HISTORY_SAVE("히스토리로그 저장 실패"),
|
||||||
|
|
||||||
//calium
|
//calium
|
||||||
ERROR_CALIUM_FINISH("충전 완료된 칼리움입니다."),
|
ERROR_CALIUM_FINISH("충전 완료된 칼리움입니다."),
|
||||||
|
|
||||||
@@ -72,6 +75,9 @@ public enum ErrorCode {
|
|||||||
ERROR_LOG_MEMORY_LIMIT("데이터가 많아 메모리 초과"),
|
ERROR_LOG_MEMORY_LIMIT("데이터가 많아 메모리 초과"),
|
||||||
ERROR_MONGODB_QUERY("디비 조회 에러"),
|
ERROR_MONGODB_QUERY("디비 조회 에러"),
|
||||||
|
|
||||||
|
//Initialize
|
||||||
|
ERROR_DATA_INIT("데이터 초기화 에러 발생"),
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------------------
|
||||||
// DyanamoDB
|
// DyanamoDB
|
||||||
//------------------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -13,14 +13,18 @@ public class AdminConstants {
|
|||||||
public static final String MONGO_DB_COLLECTION_UGQ_CREATE = "ugqcreate";
|
public static final String MONGO_DB_COLLECTION_UGQ_CREATE = "ugqcreate";
|
||||||
public static final String MONGO_DB_COLLECTION_METAVER_SERVER = "metaverseserver";
|
public static final String MONGO_DB_COLLECTION_METAVER_SERVER = "metaverseserver";
|
||||||
public static final String MONGO_DB_COLLECTION_LOG = "Log";
|
public static final String MONGO_DB_COLLECTION_LOG = "Log";
|
||||||
|
public static final String MONGO_DB_COLLECTION_DATA_INIT_HISTORY = "dataInitHistory";
|
||||||
|
public static final String MONGO_DB_COLLECTION_HISTORY_LOG = "historyLog";
|
||||||
|
|
||||||
public static final String MONGO_DB_KEY_LOGTIME = "logTime";
|
public static final String MONGO_DB_KEY_LOGTIME = "logTime";
|
||||||
public static final String MONGO_DB_KEY_LOGMONTH = "logMonth";
|
public static final String MONGO_DB_KEY_LOGMONTH = "logMonth";
|
||||||
public static final String MONGO_DB_KEY_LOGDAY = "logDay";
|
public static final String MONGO_DB_KEY_LOGDAY = "logDay";
|
||||||
public static final String MONGO_DB_KEY_LOGHOUR = "logHour";
|
public static final String MONGO_DB_KEY_LOGHOUR = "logHour";
|
||||||
public static final String MONGO_DB_KEY_LOGMINUTE = "logMinute";
|
public static final String MONGO_DB_KEY_LOGMINUTE = "logMinute";
|
||||||
|
public static final String MONGO_DB_KEY_TIMESTAMP = "timestamp";
|
||||||
|
|
||||||
public static final String MONGO_DB_KEY_MESSAGE = "message";
|
public static final String MONGO_DB_KEY_MESSAGE = "message";
|
||||||
|
public static final String MONGO_DB_KEY_DB_TYPE = "dbType";
|
||||||
|
|
||||||
public static final String MONGO_DB_KEY_USER_GUID = "userGuid";
|
public static final String MONGO_DB_KEY_USER_GUID = "userGuid";
|
||||||
public static final String MONGO_DB_KEY_USER_NICKNAME = "userNickname";
|
public static final String MONGO_DB_KEY_USER_NICKNAME = "userNickname";
|
||||||
|
|||||||
@@ -21,4 +21,6 @@ public class CommonConstants {
|
|||||||
public static final String FORMAT_DATE_DATETIME = "yyyy-MM-dd HH:mm:ss";
|
public static final String FORMAT_DATE_DATETIME = "yyyy-MM-dd HH:mm:ss";
|
||||||
public static final String FORMAT_DATE_ISO_DATETIME = "yyyy-MM-dd'T'HH:mm:ss";
|
public static final String FORMAT_DATE_ISO_DATETIME = "yyyy-MM-dd'T'HH:mm:ss";
|
||||||
public static final String FORMAT_DATE_MAIL_DATETIME = "yyyy/MM/dd/HH:mm:ss:SS";
|
public static final String FORMAT_DATE_MAIL_DATETIME = "yyyy/MM/dd/HH:mm:ss:SS";
|
||||||
|
|
||||||
|
public static final String TRANSACTION_ID_KEY = "TRANSACTION_ID";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,11 @@ public class DynamoDBConstants {
|
|||||||
//PK
|
//PK
|
||||||
public static final String PK_KEY_CALIUM = "calium#storage";
|
public static final String PK_KEY_CALIUM = "calium#storage";
|
||||||
public static final String PK_KEY_SYSTEM_MAIL = "management_system_meta_mail#global";
|
public static final String PK_KEY_SYSTEM_MAIL = "management_system_meta_mail#global";
|
||||||
public static final String PK_KEY_LAND_AUCTION = "land_auction_registry#global";
|
public static final String PK_KEY_LAND_AUCTION_REGISTRY = "land_auction_registry#global";
|
||||||
public static final String PK_KEY_LAND_AUCTION_ACTIVE = "land_auction_activity#global";
|
public static final String PK_KEY_LAND_AUCTION_ACTIVE = "land_auction_activity#global";
|
||||||
public static final String PK_KEY_LAND_AUCTION_HIGHEST_USER = "land_auction_highest_bid_user#global";
|
public static final String PK_KEY_LAND_AUCTION_HIGHEST_USER = "land_auction_highest_bid_user#global";
|
||||||
public static final String PK_KEY_LAND_AUCTION_RECORD = "land_auction_record#global";
|
public static final String PK_KEY_LAND_AUCTION_RECORD = "land_auction_record#global";
|
||||||
|
public static final String PK_KEY_LAND_AUCTION_REFUND_BID_PRICE = "land_auction_refund_bid_price#";
|
||||||
public static final String PK_KEY_USER_NICKNAME_REGISTRY = "user_nickname_registry#global";
|
public static final String PK_KEY_USER_NICKNAME_REGISTRY = "user_nickname_registry#global";
|
||||||
public static final String PK_KEY_MONEY = "money#";
|
public static final String PK_KEY_MONEY = "money#";
|
||||||
public static final String PK_KEY_LAND = "land#";
|
public static final String PK_KEY_LAND = "land#";
|
||||||
|
|||||||
@@ -8,4 +8,5 @@ public class MysqlConstants {
|
|||||||
public static String TABLE_NAME_MAIL = "mail";
|
public static String TABLE_NAME_MAIL = "mail";
|
||||||
public static String TABLE_NAME_NOTICE = "notice";
|
public static String TABLE_NAME_NOTICE = "notice";
|
||||||
public static String TABLE_NAME_BATTLE_EVENT = "battle_event";
|
public static String TABLE_NAME_BATTLE_EVENT = "battle_event";
|
||||||
|
public static String TABLE_NAME_MESSAGE = "message";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,10 @@ import com.caliverse.admin.global.common.utils.CommonUtils;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
||||||
|
|
||||||
|
import static com.caliverse.admin.global.common.constants.CommonConstants.TRANSACTION_ID_KEY;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class TransactionIdManager {
|
public class TransactionIdManager {
|
||||||
private static final String TRANSACTION_ID_KEY = "TRANSACTION_ID";
|
|
||||||
|
|
||||||
public String getCurrentTransactionId() {
|
public String getCurrentTransactionId() {
|
||||||
String currentId = (String) TransactionSynchronizationManager.getResource(TRANSACTION_ID_KEY);
|
String currentId = (String) TransactionSynchronizationManager.getResource(TRANSACTION_ID_KEY);
|
||||||
@@ -17,4 +18,10 @@ public class TransactionIdManager {
|
|||||||
return currentId;
|
return currentId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getNewTransactionId() {
|
||||||
|
String newId = CommonUtils.getCreateGuId();
|
||||||
|
TransactionSynchronizationManager.bindResource(TRANSACTION_ID_KEY, newId);
|
||||||
|
return newId;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user