常見緣由是方法自身調用、異常被吃、異常拋出類型不對。
數據庫
緣由ide |
備註spa |
數據庫引擎不支持事務代理 |
MySQL的InnoDB引擎支持事務,可是MyISAM不支持的。注意MySQL5.5.5以前默認引擎是MyISAM事務 |
類沒有被Spring管理ci |
註解@Service,類才被Spring加載成Beanget |
方法不是publicit |
註解@Transactional用於public的方法,或者開啓AspectJ代理模式io |
方法的自身調用問題table |
經過Spring代理類在外部調用事務時@Transactional才生效 |
數據源沒有配置事務管理器 |
爲數據源配置事務管理器 |
方法被聲明爲不支持事務 |
@Transactional(propagation = Propagation.NOT_SUPPORTED)已經聲明瞭該方法不支持事務 |
異常被吃了 |
異常處理時沒有拋出 |
異常拋出類型錯誤 |
默認事務回滾異常是RuntimeException,能夠指定其餘異常:@Transactional(rollbackFor = Exception.class) |
原文連接:《Java技術棧》https://mp.weixin.qq.com/s/6EpeHAF5UmFzEuaQPWjdTw