[英]Spring transaction rollback
我一直在设法解决这一问题,但没有成功。 我在Spring 3.0.5和Postgress中使用注释驱动的事务。 我从业务逻辑方法中调用了两种dao方法:
@Transactional
public void registerTransaction(GoogleTransaction transaction) {
long transactionID = DBFactory.getTransactionDBInstance().addTransaction(transaction);
DBFactory.getGoogleTransactionDBInstance().addGoogleTransaction(transaction, transactionID);
}
第二种方法(addGoogleTransaction)在结尾处引发RuntimeException,但是不会回滚事务,并且会插入两行。
DAO方法如下所示:
public void addGoogleTransaction(GoogleTransaction transaction, long id) {
log.trace("Entering addGoogleTransaction DAO method ");
log.trace(transaction.toString());
getSimpleJdbcTemplate().update(QRY_ADD_GOOGLE_TRANSACTION, new Object[] {id, transaction.getGoogleSerialNumber() ,
transaction.getGoogleBuyerID(), transaction.getGoogleOrderID()});
log.trace("Google transaction added successfully");
throw new RuntimeException();
}
Spring配置文件:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven />
我是否需要配置其他内容? 我试图将@Transactional添加到业务逻辑类中,并将@Transactional添加到dao方法中,但这都不起作用。 感谢名单
从控制器类(用@Controller注释)中调用它以测试目的。
@RequestMapping(value = "/registration")
public String sendToRegistrationPage() throws ServiceException {
GoogleTransaction googleTransaction = new GoogleTransaction(0, "aei", new Date(), TransactionStatus.NEW, BigDecimal.ZERO, "", "", 0, "");
BillingFactory.getBillingImplementation("").registerTransaction(googleTransaction);
return "registration";
}
我不太确定BillingFactory.getBillingImplementation("")
作用。 它是纯Java工厂还是ist从应用程序上下文返回Spring服务? 我也不确定您是否有Spring事务代理-如果没有,那么您的工作很可能会自动提交。 我认为为包org.springframework.transaction
启用日志记录是一个好主意。
实际上,我期望这样的事情:
@Controller
public class MyController {
@Resource
private BillingService billingService;
@RequestMapping(value = "/registration")
public String sendToRegistrationPage() throws ServiceException {
GoogleTransaction googleTransaction = new GoogleTransaction(0, "aei", new Date(), TransactionStatus.NEW, BigDecimal.ZERO, "", "", 0, "");
billingService.registerTransaction(googleTransaction);
return "registration";
}
}
在您的Spring配置中,例如(或@Service
注释的bean):
<bean id="billingService" class="foo.bar.BillingImplementation" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.