Код: Выделить всё
public interface AopProxy {
default T self() {
return (T)AopContext.currentProxy();
}
}
< /code>
@Slf4j
@Service
public class TestTransactionalService implements AopProxy {
@Autowired
private DataSource dataSource;
@Transactional(rollbackFor = Exception.class)
public void methodA() {
System.out.println("methodA");
logTransactionInfo();
}
@Transactional(rollbackFor = Exception.class)
public void methodB() {
System.out.println("methodB");
logTransactionInfo();
}
@Transactional(rollbackFor = Exception.class)
public void methodC() {
self().methodA();
self().methodB();
System.out.println("methodC");
logTransactionInfo();
}
@Transactional(rollbackFor = Exception.class)
public void methodD() {
System.out.println(this.getClass().getName());
this.methodA();
this.methodB();
System.out.println("methodD");
logTransactionInfo();
}
public void logTransactionInfo() {
boolean isActive = TransactionSynchronizationManager.isActualTransactionActive();
System.out.println("Is transaction active? " + isActive);
String transactionName = TransactionSynchronizationManager.getCurrentTransactionName();
System.out.println("Transaction name: " + transactionName);
Integer isolationLevel = TransactionSynchronizationManager.getCurrentTransactionIsolationLevel();
System.out.println("Isolation level: " + isolationLevel);
java.sql.Connection connection = DataSourceUtils.getConnection(dataSource);
System.out.println("Connection hashCode: " + connection.hashCode());
}
}
< /code>
@RunWith(SpringRunner.class)
@SpringBootTest
@EnableAspectJAutoProxy(exposeProxy = true, proxyTargetClass = true)
@Slf4j
public class OrderManagementTest {
@Autowired
private TestTransactionalService testTransactionalService;
@Before
public void setUp() {
}
@Test
public void testTransactionalC() {
testTransactionalService.methodC();
}
@Test
public void testNoTransactionalD() {
testTransactionalService.methodD();
}
}
< /code>
testnotransactionald метод вывод с тем же соединением: < /p>
methodA
Is transaction active? true
Transaction name: org.o2.order.server.TestTransactionalService.methodD
Isolation level: null
Connection hashCode: 1232075168
methodB
Is transaction active? true
Transaction name: org.o2.order.server.TestTransactionalService.methodD
Isolation level: null
Connection hashCode: 1232075168
methodD
Is transaction active? true
Transaction name: org.o2.order.server.TestTransactionalService.methodD
Isolation level: null
Connection hashCode: 1232075168
Подробнее здесь: https://stackoverflow.com/questions/797 ... pring-boot