Spring事务简介
1.在jdbcConfig配置文件中配一个事务管理器,在这个事务管理器然后new一个基于jdbc实现的spring实现类 DataSourceTransactionManager
@Value(“${jdbc.driver}”)
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
//1.定义一个方法获取要管理的对象
//2.添加@Bean,表示当前方法的返回值是一个bean
@Bean
public DataSource dataSource(){
DruidDataSource ds=new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
//定义事务管理器给spring管理
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){//加载外部资源,通过相同的dataSource进行事务管理
DataSourceTransactionManager transactionManager=new DataSourceTransactionManager();//这个式jdbc的事务
transactionManager.setDataSource(dataSource);
return transactionManager;
}
2.在业务层接口 加上@Transactional注解开启事务,则里面的方法同成功,或者同失败,其原理为把业务层接口的事务与dao层的种种事务进行绑定,作为一个事务,只要这个业务层的事务发生异常,则所有的事务都会回滚,但只有内存溢出和运行时异常才会回滚,如果遇到IOExcption异常事务不会回滚,则要改@Transactional(rolbackFor=IOException.class),则如果发生IOException异常事务也会回滚
3.在springConfig上加上注解@EnableTransactionManagement 让配置类识别注解事务
4.事务传播行为:事务协调员对事务管理员所携带事务的处理态度
事务管理员:例service
事务协调员:例dao
@Transactional(propagation=Propagation.REQUIRES_NEW)用来设置事务的传播行为,@Transactional(propagation=Propagation.REQUIRES_NEW)这个加在不受其他事务影响的接口上,自己玩自己的。如果只是加了@Transactional,默认情况下加入事务管理员,