文章目录
-
-
-
-
- timeout:超时,事务超出指定执行时长后自动终止并回滚
- readOnly =false:默认为false
- noRollbackFor--class[ ]:让原来回滚的异常不回滚
- rollbackFor:让原来不回滚的异常回滚
-
-
-
isolation:事务的隔离级别
propagation :事务的传播行为
noRollbackFor—class[ ]:哪些异常事务可以不回滚
noRollbackForClassName–String[ ]
timeout:超时,事务超出指定执行时长后自动终止并回滚
readOnly : 设置事务未只读事务
rollbackFor—class[ ]:哪些异常事务需要回滚
rollbackForClassName—String[ ]
timeout:超时,事务超出指定执行时长后自动终止并回滚
@Service
public class BookService {
@Autowired
BookDao bookDao;
@Transactional(timeout = 3)
public void checkout(String username,String isbn){
//减库存
bookDao.updateStock(isbn);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//获取价格
int price = bookDao.getPrice(isbn);
//减价格
bookDao.updateBalance(username,price);
}
}
readOnly =false:默认为false
@Service
public class BookService {
@Autowired
BookDao bookDao;
@Transactional(readOnly =false)
public void checkout(String username,String isbn){
//减库存
bookDao.updateStock(isbn);
//获取价格
int price = bookDao.getPrice(isbn);
//减价格
bookDao.updateBalance(username,price);
}
}
noRollbackFor–class[ ]:让原来回滚的异常不回滚
异常分类:
运行时异常:可以不处理,默认都回滚
编译器异常:必须处理,默认不回滚
@Service
public class BookService {
@Autowired
BookDao bookDao;
@Transactional(noRollbackFor = {ArithmeticException.class})
public void checkout(String username,String isbn){
//减库存
bookDao.updateStock(isbn);
//获取价格
int price = bookDao.getPrice(isbn);
//减价格
bookDao.updateBalance(username,price);
//运行时异常,默认回滚
int i=10/0;
}
}
rollbackFor:让原来不回滚的异常回滚
@Service
public class BookService {
@Autowired
BookDao bookDao;
@Transactional()
public void checkout(String username,String isbn) throws FileNotFoundException {
//减库存
bookDao.updateStock(isbn);
//获取价格
int price = bookDao.getPrice(isbn);
//减价格
bookDao.updateBalance(username,price);
//编译时异常,默认不回滚
new FileInputStream("D://hdafkajd");
}
}
设置rollbackFor属性,让原来不回滚的事务回滚。
@Service
public class BookService {
@Autowired
BookDao bookDao;
@Transactional(rollbackFor = {FileNotFoundException.class})
public void checkout(String username,String isbn) throws FileNotFoundException {
//减库存
bookDao.updateStock(isbn);
//获取价格
int price = bookDao.getPrice(isbn);
//减价格
bookDao.updateBalance(username,price);
//编译时异常,默认不回滚
new FileInputStream("D://hdafkajd");
}
}