我正在尝试配置Spring Transactions但它们似乎无法正常工作。
这是我的配置Java类,我给Datasource,JdbcTemplates和我使用的所有Daos定义
@Configuration
@PropertySource("${configuration.properties.path}")
@EnableTransactionManagement
public class BeanConfiguration {
...different DAOs...
@Override
@Bean
public DataSourceTransactionManager transactionManager(){
return new DataSourceTransactionManager(dataSource());
}
@Override
@Bean
public MyManager myManager(){
return new MyManager();
}
}
这是具有可转换方法的MyManager类,可与多个DAO一起使用。
//@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional(propagation = Propagation.REQUIRED, rollbackFor=Exception.class)
public class EnoceanDeviceManager{
....autowired Daos
public void addNewDevices(Class1 class1, Class2 class2) {
//returns with id
class1 = 1dao.push(class1);
class2.setClass1(class1);
class2 = 2dao.push(class2); //can throw exception
}
}
如果方法dao.push抛出异常,我希望在1道的帮助下进行数据库更改不会发生。在DAO级别中没有尝试捕获。 这是我使用MyManager的一个示例将一对对象推到一起的类:
public class TestEnoceanDeviceManager extends BigClassForTestsWITHCOnfigurations{
@Atowired
MyManager myManager;
@Test
//the method
public void testAddNewDevices(){
.... defining class1 and class2....
myManager.addNewDevices(class1, class2);
}
}
因此,方法testAddNewDevices
仅从2dao.push()
方法抛出非捕获的异常,并且不记录回滚。我尝试在不同的级别上捕获异常,但仍然没有回滚。
我做错了什么?