专栏名称: ImportNew
伯乐在线旗下账号,专注Java技术分享,包括Java基础技术、进阶技能、架构设计和Java技术领域动态等。
目录
相关文章推荐
Java编程精选  ·  WebSocket 的 6 ... ·  21 小时前  
芋道源码  ·  Spring ... ·  17 小时前  
芋道源码  ·  某公司新招了个牛逼的架构师后... ·  2 天前  
Java编程精选  ·  Map 只会 ... ·  3 天前  
51好读  ›  专栏  ›  ImportNew

SpringBoot 的事务管理

ImportNew  · 公众号  · Java  · 2017-04-12 12:05

正文

(点击 上方公众号 ,可快速关注)


来源:fangjian0423,

fangjian0423.github.io/2016/10/07/springboot-transaction/

如有好文章投稿,请点击 → 这里了解详情


Springboot内部提供的事务管理器是根据autoconfigure来进行决定的。


比如当使用jpa的时候,也就是pom中加入了spring-boot-starter-data-jpa这个starter之后。


Springboot会构造一个JpaTransactionManager这个事务管理器。


而当我们使用spring-boot-starter-jdbc的时候,构造的事务管理器则是DataSourceTransactionManager。


这2个事务管理器都实现了spring中提供的PlatformTransactionManager接口,这个接口是spring的事务核心接口。


这个核心接口有以下这几个常用的实现策略:


  1. HibernateTransactionManager

  2. DataSourceTransactionManager

  3. JtaTransactionManager

  4. JpaTransactionManager


具体的PlatformTransactionManager继承关系如下:



spring-boot-starter-data-jpa这个starter会触发HibernateJpaAutoConfiguration这个自动化配置类,HibernateJpaAutoConfiguration继承了JpaBaseConfiguration基础类。


在JpaBaseConfiguration中构造了事务管理器:


@Bean

@ConditionalOnMissingBean(PlatformTransactionManager.class)

public PlatformTransactionManager transactionManager() {

return new JpaTransactionManager();

}


spring-boot-starter-jdbc会触发DataSourceTransactionManagerAutoConfiguration这个自动化配置类,也会构造事务管理器:


@Bean

@ConditionalOnMissingBean(PlatformTransactionManager.class)

@ConditionalOnBean(DataSource.class)

public DataSourceTransactionManager transactionManager() {

return new DataSourceTransactionManager(this.dataSource);

}


Spring的事务管理器PlatformTransactionManager接口中定义了3个方法:


// 基于事务的传播特性,返回一个已经存在的事务或者创建一个新的事务

TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;







请到「今天看啥」查看全文