트랜잭션 처리 수정 및 공통정보
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.exception.RestApiException;
|
||||
import com.caliverse.admin.global.component.transaction.DynamoDBTransactionContext;
|
||||
import com.caliverse.admin.global.component.transaction.TransactionIdManager;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
|
||||
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedRequest;
|
||||
|
||||
import static com.caliverse.admin.global.common.constants.CommonConstants.TRANSACTION_ID_KEY;
|
||||
|
||||
@Aspect
|
||||
@Component
|
||||
@Slf4j
|
||||
public class DynamoDBTransactionAspect {
|
||||
private final DynamoDbEnhancedClient enhancedClient;
|
||||
private final TransactionIdManager transactionIdManager;
|
||||
|
||||
public DynamoDBTransactionAspect(DynamoDbEnhancedClient enhancedClient) {
|
||||
public DynamoDBTransactionAspect(DynamoDbEnhancedClient enhancedClient, TransactionIdManager transactionIdManager) {
|
||||
this.enhancedClient = enhancedClient;
|
||||
this.transactionIdManager = transactionIdManager;
|
||||
}
|
||||
|
||||
@Around("@annotation(com.caliverse.admin.global.common.annotation.DynamoDBTransaction)")
|
||||
@@ -28,6 +34,12 @@ public class DynamoDBTransactionAspect {
|
||||
TransactWriteItemsEnhancedRequest.Builder transactionBuilder =
|
||||
TransactWriteItemsEnhancedRequest.builder();
|
||||
|
||||
boolean hasExistingTransaction = TransactionSynchronizationManager.hasResource(TRANSACTION_ID_KEY);
|
||||
|
||||
if (!hasExistingTransaction) {
|
||||
transactionIdManager.getCurrentTransactionId();
|
||||
}
|
||||
|
||||
try {
|
||||
// 메서드 실행 전 트랜잭션 컨텍스트 설정
|
||||
DynamoDBTransactionContext.setTransactionBuilder(transactionBuilder);
|
||||
@@ -38,7 +50,7 @@ public class DynamoDBTransactionAspect {
|
||||
// 트랜잭션 커밋
|
||||
TransactWriteItemsEnhancedRequest transactionRequest =
|
||||
DynamoDBTransactionContext.getTransactionBuilder().build();
|
||||
if (!transactionRequest.transactWriteItems().isEmpty()) {
|
||||
if (transactionRequest.transactWriteItems() != null && !transactionRequest.transactWriteItems().isEmpty()) {
|
||||
enhancedClient.transactWriteItems(transactionRequest);
|
||||
}
|
||||
|
||||
@@ -54,6 +66,10 @@ public class DynamoDBTransactionAspect {
|
||||
} finally {
|
||||
// 트랜잭션 컨텍스트 정리
|
||||
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.transaction.support.TransactionSynchronizationManager;
|
||||
|
||||
import static com.caliverse.admin.global.common.constants.CommonConstants.TRANSACTION_ID_KEY;
|
||||
|
||||
@Aspect
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class TransactionIdAspect {
|
||||
private final TransactionIdManager transactionIdManager;
|
||||
private static final String TRANSACTION_ID_KEY = "TRANSACTION_ID";
|
||||
|
||||
@Around("@annotation(org.springframework.transaction.annotation.Transactional)")
|
||||
public Object setTransactionId(ProceedingJoinPoint joinPoint) throws Throwable {
|
||||
|
||||
@@ -30,6 +30,7 @@ public enum ErrorCode {
|
||||
PASSWORD_ERROR("입력된 현재 비밀번호가 틀립니다."),
|
||||
|
||||
NOT_FOUNT_TEAM("입력한 팀을 찾지 못했습니다."),
|
||||
NOT_FOUNT_API("요청한 API를 찾지 못했습니다."),
|
||||
NOT_FOUNT_POSITION( "입력한 직급을 찾지 못했습니다."),
|
||||
NOT_MATCH_USER("이메일 또는 비밀번호가 일치하지않습니다."),
|
||||
DUPLICATED_EMAIL("동일한 이메일이 존재합니다."),
|
||||
@@ -49,6 +50,8 @@ public enum ErrorCode {
|
||||
|
||||
ERROR_API_CALL("API 호출에 실패하였습니다."),
|
||||
|
||||
ERROR_HISTORY_SAVE("히스토리로그 저장 실패"),
|
||||
|
||||
//calium
|
||||
ERROR_CALIUM_FINISH("충전 완료된 칼리움입니다."),
|
||||
|
||||
@@ -72,6 +75,9 @@ public enum ErrorCode {
|
||||
ERROR_LOG_MEMORY_LIMIT("데이터가 많아 메모리 초과"),
|
||||
ERROR_MONGODB_QUERY("디비 조회 에러"),
|
||||
|
||||
//Initialize
|
||||
ERROR_DATA_INIT("데이터 초기화 에러 발생"),
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------------------
|
||||
// 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_METAVER_SERVER = "metaverseserver";
|
||||
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_LOGMONTH = "logMonth";
|
||||
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_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_DB_TYPE = "dbType";
|
||||
|
||||
public static final String MONGO_DB_KEY_USER_GUID = "userGuid";
|
||||
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_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 TRANSACTION_ID_KEY = "TRANSACTION_ID";
|
||||
}
|
||||
|
||||
@@ -8,10 +8,11 @@ public class DynamoDBConstants {
|
||||
//PK
|
||||
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_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_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_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_MONEY = "money#";
|
||||
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_NOTICE = "notice";
|
||||
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.transaction.support.TransactionSynchronizationManager;
|
||||
|
||||
import static com.caliverse.admin.global.common.constants.CommonConstants.TRANSACTION_ID_KEY;
|
||||
|
||||
@Component
|
||||
public class TransactionIdManager {
|
||||
private static final String TRANSACTION_ID_KEY = "TRANSACTION_ID";
|
||||
|
||||
public String getCurrentTransactionId() {
|
||||
String currentId = (String) TransactionSynchronizationManager.getResource(TRANSACTION_ID_KEY);
|
||||
@@ -17,4 +18,10 @@ public class TransactionIdManager {
|
||||
return currentId;
|
||||
}
|
||||
|
||||
public String getNewTransactionId() {
|
||||
String newId = CommonUtils.getCreateGuId();
|
||||
TransactionSynchronizationManager.bindResource(TRANSACTION_ID_KEY, newId);
|
||||
return newId;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user