DB2 Java Spring@Transactional with Propagation.REQUIRES_NEW不读取隔离。读取未提交
我有个奇怪的问题,我想不出来。 DB2数据库 Java Spring 4 冬眠4 我有一个事务类:DB2 Java Spring@Transactional with Propagation.REQUIRES_NEW不读取隔离。读取未提交,java,spring,hibernate,db2,Java,Spring,Hibernate,Db2,我有个奇怪的问题,我想不出来。 DB2数据库 Java Spring 4 冬眠4 我有一个事务类: public class B2BTrackingMsgProcessorImpl … { private GenericProcessor trackProcessor; @Transactional public void process(Message msg){ …. trackProcessor.process(msg); } } public class
public class B2BTrackingMsgProcessorImpl … {
private GenericProcessor trackProcessor;
@Transactional
public void process(Message msg){ ….
trackProcessor.process(msg);
}
}
public class TrackingMsgProcessor …{
private ILookupUUIDXRef uuidXRefLookup;
public void process(msg) {…
uuidXRefLookup.getPayloadIdByUuid(uuid…);
}
}
public interface ILookupUUIDXRef {
PayloadIdXRef getPayloadIdByUuid(String uuid);
}
public class LookupUuidXrefImpl implements ILookupUUIDXRef {
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED)
public PayloadIdXRef getPayloadIdByUuid(String uuid) {
}
所以类“LookupUuidXrefImpl”创建了一个新事务,我想读取未提交的事务
Spring上下文:
<bean id="b2bTrackingMsgProcessor" class="B2BTrackingMsgProcessorImpl">
<property name="trackProcessor" ref="trackProcessor"/>
</bean>
<bean id="trackProcessor" class="TrackingMsgProcessor">
<property name="uuidXRefLookup" ref="uuidLookup"/>
</bean>
<bean id="uuidLookup" class="LookupUuidXrefImpl">
</bean>
日志显示不同的事务:
调试Tra
ckckingmsgprocessor-TransactionStatus=org.springframework.transaction.support。DefaultTransactionStatus@fc028b62
调试LookupUuidXrefImpl-TransactionStatus=org.springframework.transaction.support。DefaultTransactionStatus@a8aa0f45
但是,select查询没有“with UR”,而且只要DBA选中,它总是CS隔离(默认)
如何使新事务读取为未提交的“UR”
?
我看到的SQL没有“with ur”:
从有效负载\u ID\u外部参照payloadidx0\u中选择a、b、c,其中payloadidx0\uId0.PAYLD\u UUID=?
即使spring日志显示新事务,UR:
WebSphereUowTransactionManager-创建名为[null]的新事务:传播\u需要\u新建、隔离\u读取\u未提交
您看不到使用UR的,因为事务管理器不在语句级别处理事务隔离(事实上,大多数RDBMS甚至不提供这样的功能)。相反,每个正在进行的事务都需要一个单独的连接,并且在连接级别上设置隔离。为什么您需要使用UR的
?我只把这看作是最后的手段,当表现不好的时候。不过,它也有缺点。@crizzis-这是一件令人头疼的事。。。我将无法与您建立另一个连接。。。。不幸的是,我将研究如何创建一个本机查询,在其中指定UR,看看这是否有效@Impaler-I有6个并发线程分布在多个JVM上,所有线程都试图创建UUID记录,这会造成冲突。我希望能够将碰撞的次数减少到最小,因此UR。创建UUID的第一个线程将成功,所有后续线程将只使用已经存在的UUID,如果事务失败,则重试。