Spring基础学习——Spring事务
1. Spring事务简介
-
事务作用:在数据层保障一系列的数据库操作同成功同失败 Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败 Spring为了管理事务,提供了一个平台事务管理器PlatformTransactionManager
2. Spring事务管理
步骤1:在业务层接口上添加Spring事务管理注解
public interface AccountService { /** * 转账操作 * @param out 传出方 * @param in 转入方 * @param money 金额 */ @Transactional public void transfer(String out, String in, Double money); }
注意:Spring注解事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合
步骤2:在JdbcConfig类中配置事务管理器
public class JdbcConfig { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String userName; @Value("${jdbc.password}") private String password; @Bean public DataSource dataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); return ds; } // 配置事务管理器,mybatis使用的是jdbc事务 @Bean public PlatformTransactionManager transactionManager(DataSource dataSource){ DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(); transactionManager.setDataSource(dataSource); return transactionManager; } }
注意:事务管理器要根据使用技术进行选择,Mybatis框架使用的是JDBC事务,可以直接使用DataSourceTransactionManager
步骤3:开启事务注解 在SpringConfig的配置类中开启
@Configuration @ComponentScan("com.lenyoo") @PropertySource("jdbc.properties") @Import({ JdbcConfig.class,MyBatisConfig.class}) // 开启注解式事务驱动 @EnableTransactionManagement public class SpringConfig { }
2. Spring事务角色
-
事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法 事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法 注意:
目前的事务管理是基于DataSourceTransactionManager和SqlSessionFactoryBean使用的是同一个数据源。
3. Spring事务属性
上面这些属性都可以在@Transactional注解的参数上进行设置。
-
readOnly:true只读事务,false读写事务,增删改要设为false,查询设为true。 timeout:设置超时时间单位秒,在多长时间之内事务没有提交成功就自动回滚,-1表示不设置超时时间。 rollbackFor:当出现指定异常进行事务回滚 noRollbackFor:当出现指定异常不进行事务回滚
-
事务传播行为
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
编程之路小细节-逆向思维的运用