0
기존 트랜잭션에 리소스/상태를 추가/가져 오는 방법을 찾으려고합니다. Spring에서도 가능합니까? 그러나Spring : 트랜잭션 특정 리소스 추가
org.springframework.transaction.support.TransactionSynchronizationManager#getResouce(Object)
org.springframework.transaction.support.TransactionSynchronizationManager#bindResource(Object, Object)
, 이것은 트랜잭션의 현재 스레드에 리소스를 추가 내가 비슷한 무언가를 발견
@Service
@Transactional("txManager")
public class ServiceImpl implements Service {
@Override
@AddResourceHere
public TestObj doSomething(){
...
}
@Override
@AddResourceHere
public TestObj doSomethingAgain(){
...
}
}
@Aspect
@Component
public class Interceptor {
private static final Logger logger = LogManager.get(Interceptor.class);
@Before("@annotation(my.package.AddResourceHere)")
public void switchDatabase(JoinPoint joinPoint){
MyResource resource = TransactionResouceAdder.getResource("transactionSpecificResource");
if(resource == null){
TransactionResouceAdder.addResource(new MyResource("A new resource"));
...
}
else
log.info("resource has already been added for this transaction");
}
}
public class Test {
...
@Test
@Transactional("txManager")
public void doSomethingTest(){
serviceImpl.doSomething();
serviceImpl.doSomethingAgain();
}
}
:
는 내가 달성하기 위해 노력하고있어 아래 의사 코드와 유사하다 . 리소스 트랜잭션을 한정적으로 만 할 수있는 방법이 있습니까?
실제 코드에서는 spring jdbc의 DataSourceTransactionManager를 트랜잭션 관리자로 사용하고 있습니다. 어떤 도움 :)
정보 주셔서 감사합니다! 사실, 소스 코드를 조사한 결과, TransactionSynchronizationManager를 사용하는 방식이 불완전하다는 것을 알게되었습니다. 내가 놓친 중요한 단계는 현재 활성 트랜잭션에 대한 자원의 동기화입니다. ** org.springframework.transaction.support.ResourceHolder ** ** org.springframework.transaction.support.ResourceHolderSupport ** ** org.springframework.transaction.support.ResourceHolderSynchronization :이 단계는 다음을 사용하여/확장 포함 ** – jespeno