From 46343248e48c6aa93b81115ea16b606d0692fd30 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Sun, 17 Jul 2022 19:19:13 +0900 Subject: [PATCH] #13 spring transaction - proxy internal call solve --- .../apply/InternalCallV2Test.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 spring-transaction/src/test/java/com/example/springtransaction/apply/InternalCallV2Test.java diff --git a/spring-transaction/src/test/java/com/example/springtransaction/apply/InternalCallV2Test.java b/spring-transaction/src/test/java/com/example/springtransaction/apply/InternalCallV2Test.java new file mode 100644 index 00000000..919d9cde --- /dev/null +++ b/spring-transaction/src/test/java/com/example/springtransaction/apply/InternalCallV2Test.java @@ -0,0 +1,75 @@ +package com.example.springtransaction.apply; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionSynchronizationManager; + +@Slf4j +@SpringBootTest +public class InternalCallV2Test { + + @Autowired + CallService callService; + + @Test + void printProxy() { + log.info("callService class={}", callService.getClass()); + } + + @Test + void externalCallV2() { + callService.external(); + } + + @TestConfiguration + static class InternalCallV1TestConfig { + + @Bean + CallService callService() { + return new CallService(internalService()); + } + + @Bean + InternalService internalService() { + return new InternalService(); + } + } + + @Slf4j + @RequiredArgsConstructor + static class CallService { + + private final InternalService internalService; + + public void external() { + log.info("call external"); + printTxInfo(); + internalService.internal(); + } + + private void printTxInfo() { + boolean txActive = TransactionSynchronizationManager.isActualTransactionActive(); + log.info("tx active={}", txActive); + } + } + + static class InternalService { + + @Transactional + public void internal() { + log.info("call internal"); + printTxInfo(); + } + + private void printTxInfo() { + boolean txActive = TransactionSynchronizationManager.isActualTransactionActive(); + log.info("tx active={}", txActive); + } + } +}