当我在Impl类中抛出RuntimeException时,事务不会被回滚。但是当我在Impl类中取消注释update语句并在路由中注释update语句代码时 交易被回滚。
如何在实现类抛出异常时回滚在路由中写入的更新语句。
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route id="wsRoute">
<from uri="cxf:bean:paymentServiceEndpoint"/>
<transacted />
<split streaming="true" parallelProcessing="true">
<simple>${in.body[0]}</simple>
<setHeader headerName="bank">
<simple>${body.bank}</simple>
</setHeader>
<log message="The header value is ${header.bank}" />
<setBody>
<constant>
UPDATE TEST
SET RECEIVED_BY = 'Y'
WHERE ID = :?bank
</constant>
</setBody>
<to uri="jdbc:dataSource?useHeadersAsParameters=true" />
</split>
<bean ref="paymentServiceImpl" />
<log message="response = ${body}"/>
</route>
</camelContext>
@Transactional(value="txManager", propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
public TransferResponse transfer(TransferRequest request) {
System.out.println("***********PaymentServiceImpl..." + request.getFrom());
/*
final int updated= jdbc.update("update TEST set RECEIVED_BY = 'Y' where ID = ?",
"abc" );
*/
TransferResponse response = new TransferResponse();
if(true)
throw new RuntimeException("update exception");
response.setReply("OK");
System.out.println("***********PaymentServiceImpl.." + response.getReply());
return response;
}
答案 0 :(得分:1)
您不能对事务使用并行处理,因为事务的工作单元必须由同一个线程完成,事务管理器需要该线程才能正确编排。所以关掉它。