@Service
public class UserServiceImpl implements UserService {
@Autowired
private SysUserMapper mapper;
@Override
public boolean saveUsers(List<SysUser> users) {
int flag = 0;
for (SysUser user : users) {
flag+=mapper.insertSelective(user);
int a = 1/0;
}
return flag==users.size()?true:false;
}
}
@Test
public void Test(){
List<SysUser> users = new ArrayList<SysUser>();
for (int i = 14; i < 16; i++) {
SysUser user = new SysUser();
user.setLoginAccount("admin"+i);
user.setLoginPwd("admin"+i);
user.setRealName("管理"+i);
user.setFlag(i%2);
users.add(user);
}
boolean status = service.saveUsers(users);
Assert.assertTrue(status);
}
<tx:advice id="tx" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="select*" read-only="true"/>
<tx:method name="query*" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="p1" expression="execution(* com.ak.service..*.*.*(..))"/>
<aop:advisor advice-ref="tx" pointcut-ref="p1"></aop:advisor>
</aop:config>
又不是什么异常都给你回滚
<aop:pointcut id="p1" expression="execution(* com.ak.service..*.*(..))
网上搜到一个这种方法,试了下还是不行
private DataSourceTransactionManager transactionManager; //事务管理器
@Override
public boolean saveUsers(List<SysUser> users) {
//以下是手动开启事务 发现怎么样都会自动提交,所以干脆用手动提交代码
//1.获取事务定义
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
//2.设置事务隔离级别,开启新事务
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
//3.获得事务状态
TransactionStatus status = transactionManager.getTransaction(def);