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:当出现指定异常不进行事务回滚
    事务传播行为
经验分享 程序员 微信小程序 职场和发展