其他分享
首页 > 其他分享> > Spring:事务管理

Spring:事务管理

作者:互联网

事务

什么是事务?

事务是数据库操作最基本单元,逻辑上,一组操作要么都成功,如果有一个失败就都失败。

在银行转账业务中,首先是用户A扣除一定金额,然后再给用户B增加一定金额。这就是一个事务,他们不可分割,总量不会减少,其他的事务不会影响这个事务,一旦提交了,数据就永久保存。

​ 一般而言,事务添加在Service层。事务方式分为两种:编程式事务管理和声明式事务管理。一般使用声明式。声明式事务管理有基于注解方式和基于xml配置文件方式进行,一般使用基于注解方式。Spring提供了一个接口PlatformTransactionManager(事务管理器),根据不同的框架提供了不同的接口的实现(JDBC和MyBatis使用DataSourceTransactionManager


基于注解方式实现事务管理

  1. 在Spring中配置事务管理器,并完成数据源注入。

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
  2. 在Spring中开启注解扫描

    1. 先配置名称空间tx

    2. 开启事务注解并指定哪一个事务管理器

      <tx:annotation-driven transaction-manager="TransactionManager"/>
      
  3. 在service类或方法上添加事务注解。@Transactional


@Transactional的参数配置。


基于XML方式实现事务管理

  1. 配置xml文件

  2. 配置事务管理器参数

    <tx:advice id="tx">
        <tx:attributes>
            <tx:method name="transfer"/>
        </tx:attributes>
    </tx:advice>
    
  3. 配置切入点、切面

    <aop:config>
        <aop:pointcut id="pt" expression="execution(* com.boerk.txDemo.service.*(..))"/>
        <aop:advisor advice-ref="tx" pointcut-ref="pt"></aop:advisor>
    </aop:config>
    

基于完全注解开发实现事务操作

@Configuration
@ComponentScan(basePackages="com.boerk")
@EnableTransactionManagement
public class SpringConfig {
@Bean
    public DruidDataSource getDruidDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource;
        druidDataSource.setUrl("jdbc:mysql://localhost:3307/boerk");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("root123");
        druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        return druidDataSource;
    }
    @Bean
    public JdbcTemplate getJdbcTemplate(DruidDataSource druidDataSource){
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(druidDataSource);
        return jdbcTemplate;
    }
    @Bean
    public DataSourceTransactionManager getDataSourceTransactionManager(DruidDataSource druidDataSource){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(druidDataSource);
        return dataSourceTransactionManager;
    }

}

标签:事务管理,事务,Spring,回滚,druidDataSource,注解
来源: https://www.cnblogs.com/Boerk/p/15824056.html