Junior — Middle
121
Spring-де бір транзакциялық аймақтағы басқа әдістің ішінде @Transactional аннотациясымен белгіленген бір әдісті шақыру кезінде транзакциялық операциялардың санын қалай есептеуге болады?
Сұралған компаниялар
AI-дан жауап
sobes.tech AI
Spring-те @Transactional аннотациясы бар бір әдісті басқа әдістен шақырғанда, егер сыртқы транзакция бұрыннан белсенді болса, бірдей транзакция пайдаланылады. Ішкі шақыру жаңа транзакция құрып жатқан жоқ, себебі Spring проксиі бір бина ішіндегі шақыруларды ұстамайды.
Транзакциялық операциялардың санын есептеу үшін (мысалы, жаңа транзакция қанша рет басталғанын), келесі әдістерді қолдануға болады:
TransactionSynchronizationManagerарқылы транзакцияларды логтау.- Өзгертілген
PlatformTransactionManagerенгізу немесе AOP пайдалану арқылы транзакциялардың басталуын есептеу.
AOP қолдану арқылы транзакциялардың басталуын есептеу мысалы:
@Aspect
@Component
public class TransactionCounterAspect {
private AtomicInteger transactionCount = new AtomicInteger(0);
@Before("execution(@org.springframework.transaction.annotation.Transactional * *(..))")
public void beforeTransactionalMethod() {
if (!TransactionSynchronizationManager.isActualTransactionActive()) {
transactionCount.incrementAndGet();
}
}
public int getTransactionCount() {
return transactionCount.get();
}
}
Осылайша, егер әдіс бұрыннан белсенді транзакция ішінде шақырылса, есептегіш өсірілмейді, себебі жаңа транзакция құрылады. Егер жаңа транзакция болса, есептегіш өседі. Бұл әдіс шақырылған кезде қанша транзакция нақты басталғанын түсінуге көмектеседі.