@Component("userService")
//@Transactional 也可以只写在某些需要事务的方法上
public class UserService {
//@Transactional(propagation=Propagation.REQUIRED)这是@Transactional的默认值,
//就是说@Transactional(propagation=Propagation.REQUIRED)=@Transactional
//Transactional默认的是REQUIRED,意思就是: 别的方法调用我,别的方法有事务了,我这个 //方法就不创建事务了,用前面的方法的事务,如果前面的方法没有事务,我这里就创建事务。
//自己查看Transactional的propagation属性,事务的传播方式的意思
@Transactional(readOnly=true)//加事务; spring里如果是运行期异常会自动回滚
public void add(User user) {
//事务的传播特性:
//Transactional的设置有下面这些: 记住这个就行了Propagation.REQUIRED
//Propagation.REQUIRED:别的方法调用我,别的方法有事务了,我这个方法就不创建事务 //了,用前面的方法的事务,如果前面的方法没有事务,我这里就创建事务
//Propagation.MANDATORY:谁调用我这方法,谁就必须要开启事务,不然报错
//Propagation.NESTED:如果原来有事务,那在调用我的时候原来的事务暂停设置一个保存 //点,我这里要开启新的事务,我这里的事务结束了才执行调用者的事务,
// 我这新的事务如果要回滚的时候就回滚到保存点;
//Propagation.NEVER;不能有事务
//Propagation.NOT_SUPPORTED:我这方法执行不能有事务,如果原来有事务就暂停,我这 //里执行完 了,原来的事务继续执行
//Propagation.REQUIRED_NEW:如果当前有事务,就挂起,创建新的事务,你没事务我这 //里也要创建新的事务
//Propagation.SUPPORTS:你有事务我就有事务,没有我这也就没有
//事务的隔离级别:
//readOnly=true/false 只读/不只读的意思,不能插入数据 ;readOnly=true的时候 得到的
//数据库连接connection的执行效率高
//timeout: 设置事务超时时间,事务时间太长了就终止掉
//roollbackFor:在什么情况下回滚(可以自己指定什么情况下回滚),不写的话就是默认的运行异 //常就回滚,运行期间的异常都会回滚,所以我们都没写try catcht 来回滚事务
//noroollbackFor: 指定什么情况下事务不回滚
}
}