代码实例
上下文配置类上加上@EnableTransactionManagement
注解
@Configuration
@EnableTransactionManagement
public class RootConfig {
}
注册DataSourceTransactionManager
@Bean
public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
DataSourceTransactionManager manager = new DataSourceTransactionManager();
manager.setDataSource(dataSource);
return manager;
}
在这个上下文中定义的其它bean即可使用声明式事务
@Transactional
public void insertUser(User user) throws UsernameDuplicatedException {
if(this.validateUsernameDuplicated(user.getUsername())) {
userMapper.insertUserBasicInfo(user);
userMapper.insertUserAuthority(user.getId(), user.getAuthority());
} else {
throw new UsernameDuplicatedException("Username : [" + user.getUsername() + "] has existed in database.");
}
}
事务生效条件
由于声明式事务是通过动态代理实现的,注解@Transactional
必须加在public
方法上,并且必须是别的对象调用该对象的这个public
方法,事务才生效
PREVIOUSDBCP数据库连接池使用