Java 在@before方法中保存状态,执行@test,然后在@after中回滚更改
我想知道这是否可能。这是我的第一个问题,所以如果我没有严格遵守协议,请容忍我。我能够使用事务模板回滚事务。但是现在我要做的是在标记为@before的方法中保存一个状态,然后在@after方法中回滚它 例如,这是我以前的经历:Java 在@before方法中保存状态,执行@test,然后在@after中回滚更改,java,spring,junit,Java,Spring,Junit,我想知道这是否可能。这是我的第一个问题,所以如果我没有严格遵守协议,请容忍我。我能够使用事务模板回滚事务。但是现在我要做的是在标记为@before的方法中保存一个状态,然后在@after方法中回滚它 例如,这是我以前的经历: _transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWith
_transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus transactionStatus)
{
Object transactionStatusSavepoint = transactionStatus.createSavepoint();
//do some work
transactionStatus.rollbackToSavepoint(transactionStatusSavepoint);
}
});
这一切都很好。现在我想这样做:
@Before
public void beforeTest() {
_template.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
_transactionStatusSavepoint = _transactionStatus.createSavepoint();
}
});
@Test
public void foo(){//do some stuff}
@After
public void afterTest() {
_transactionStatus.rollbackToSavepoint(_transactionStatusSavepoint);
}
请让我知道,如果你不明白或想详细说明。
提前谢谢 完成doInTransactionWithoutResult后,事务状态将无效,因此您不能在事后测试方法中使用它 看起来您正在使用spring进行测试。Spring附带了TestRunner,它可以在测试完成时回滚事务
那么问题出在哪里?代码不起作用?抛出错误?抛出错误。“JDBC调用中的参数无效:3B001保存点异常:规范无效”。“无法回滚到JDBC保存点;嵌套异常为java.sql.SQLException:JDBC调用中的参数无效:3B001保存点异常:org.springframework.JDBC.datasource.jdbtransactionobjectsupport.rollbackToSavepoint的规范无效(jdbctTransactionobjectsupport.java:132)”为什么不能在全局变量中保存事务状态?我对spring很陌生,可能会接受这个答案,但我只想知道。@publ1c_stat1c如果TransactionCallback没有引发异常,TransactionTemplate中的execute方法将提交事务。如果引发异常,则事务将回滚。因此,您无法回滚已提交的事务。这很有意义。非常感谢你的帮助!