事务相关知识点

  • 在对数据库进行一系列操作时,为了进行统一的提交或者回滚操作,需要进行事务管理,在使用事务时,需要有一个事务管理器,可以使用xml方式指定事务管理器,也可以使用Spring Boot中的@Configuration和@Bean注解指定:
  • xml方式
<!--配置事务管理器,指定管理着某个数据源,保证数据的完整性和一致性,-->
<bean id="transactionManager" 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  		<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 启动事务注解 --> 
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
  • 注解方式
@Configuration
public class MyAppConfig {
    
    
  	//注入数据源
    @Bean//id默认是用方法名作为id
  	//注入配置文件中的属性 关于数据库的相关配置
    @ConfigurationProperties("spring.datasource.xxx")
    public DataSource dataSource() {
    
    
        return DruidDataSourceBuilder.create().build();
    }
  	//注入事务管理器
  	//@Qualifier  指定需要装配的组件的id,而不是使用属性名
    @Bean
    public DataSourceTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) {
    
    
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }
}

事务失效原因

  • 方法的修饰符为public;
  • 数据库引擎InnoDB支持事务、MyISAM不支持事务;
  • 在具体的类或者方法上使用事务注解@Transactional;
  • 抛出RuntimeException异常,事务回滚;抛出Exception,事务不回滚;可以使用;
  • 使用try…catch…语句块对异常进行捕获并且未抛出RuntimeException异常;
  • A方法内部调用B方法,B方法上添加了事务注解,事务不生效,Spring的事务基于AOP实现。

猜你喜欢

转载自blog.csdn.net/W_ryxj000/article/details/112597308
今日推荐