最近看到Medium上一篇讨论Spring Framework中事务传播的文章,解释了几种常见的问题,解释的不错,这里直接翻译吧(意译为主,粗体和斜体是我自己加上的)。
译文:
这是我的第一篇文章,我打算给大家总结一下开发者在使用Spring事务时,常常会犯的和事务传播相关的错误。
在这之前,我们先回忆一下Spring中事务是怎样传播的。
我们先看下Ken Tousen做的有关事务传播注解的笔记(译注:这里指@Transactional注解的propagation属性),这会帮助我们更清楚地记忆。
1. 私有方法
当公有方法调用私有方法时,不会创建新事务。(译注:这里有点问题,见下面评论)
1 @Transactional 2 public class MusicPlayerService { 3 4 @Autowired 5 Song song; 6 7 @Autowired 8 MusicCatalogueService musicCatalogueService; 9 10 public void playSong() { 11 scrobble(); 12 song.play(); 13 } 14 15 @Transactional(propagation = Propagation.REQUIRES_NEW) 16 private void scrobble() { 17 musicCatalogueService.scrobble(song); 18 } 19 }