[英]Spring: Adding Transaction Specific Resource
我正在尝试找到一种向现有事务添加/获取资源/状态的方法。 春天有可能吗?
我要实现的目标类似于以下伪代码:
@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();
}
}
我发现类似的东西
org.springframework.transaction.support.TransactionSynchronizationManager#getResouce(Object)
org.springframework.transaction.support.TransactionSynchronizationManager#bindResource(Object, Object)
但是,这会将资源添加到事务的当前线程。 有没有办法使资源事务仅受限制?
在我的实际代码中,我使用spring jdbc的DataSourceTransactionManager作为事务管理器。
在此先感谢您的帮助:)
为此目的设计了TransactionSynchronizationManager
,并在事务结束时清除了资源(请参见AbstractPlatformTransactionManager
)。 您必须通过一个方面将其连接到自定义注释,但是看起来您已经知道该怎么做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.