91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Java?@Transactional指定回滾條件

發布時間:2022-08-09 13:55:45 來源:億速云 閱讀:241 作者:iii 欄目:開發技術

這篇“怎么使用Java @Transactional指定回滾條件”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“怎么使用Java @Transactional指定回滾條件”文章吧。

異常分類

怎么使用Java?@Transactional指定回滾條件

  • 可查的異常(checked exceptions):Exception下除了RuntimeException外的異常

  • 不可查的異常(unchecked exceptions):RuntimeException及其子類和錯誤(Error)

@Transactional注解屬性詳解

屬性類型描述
valueString可選的限定描述符,指定使用的事務管理器
propagationenum: Propagation可選的事務傳播行為設置
isolationenum: Isolation可選的事務隔離級別設置
readOnlyboolean讀寫或只讀事務,默認讀寫
timeoutint (in seconds granularity)事務超時時間設置
rollbackForClass對象數組,必須繼承自Throwable導致事務回滾的異常類數組
rollbackForClassName類名數組,必須繼承自Throwable導致事務回滾的異常類名字數組
noRollbackForClass對象數組,必須繼承自Throwable不會導致事務回滾的異常類數組
noRollbackForClassName類名數組,必須繼承自Throwable不會導致事務回滾的異常類名字數

@Transactional

使用@Transaction注解時,阿里巴巴代碼規范插件會提醒需要指定rollbackFor以顯示的rollback

怎么使用Java?@Transactional指定回滾條件

默認情況下,Spring框架在使用@Transaction處理事務時默認只在拋出運行時異常unchecked exceptions時才會事務回滾。也就是說,當拋出個RuntimeException 或其子類例的實例時,從事務方法中拋出的Checked exceptions將不被標識進行事務回滾。

  • 讓checked異常回滾:在整個方法前加上 @Transactional(rollbackOn=Exception.class)

  • 讓unchecked異常不回滾: @Transactional(dontRollbackOn=RunTimeException.class)

  • 不需要事務管理的(只查詢的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)

注意

  • 如果異常被try-catch了,事務就不會回滾,如果想讓事務回滾必須再往外拋try{}catch{throw Exception}

  • Spring團隊的建議在具體的類(或類的方法)上使用 @Transactional 注解,而不要使用在類所要實現的任何接口上。也可以在接口上使用 @Transactional 注解,但是這種情況需要設置基于接口的代理時才生效

  • @Transactional 注解標識的方法,建議處理過程盡量的簡單。尤其是帶鎖的事務方法,能不放在事務里面的最好不要放在事務里面。可以將常規的數據庫查詢操作放在事務前面進行,而將增、刪、改等操作放在事務中

代碼

@Slf4j
@Service
public class MemberService {

    @Autowired
    private MemberMapper memberMapper;

    @Transactional
    public Integer insert(MemberEntity memberEntity) {
        Integer insertResult = 0;
        try {
            insertResult = memberMapper.save(memberEntity);
            log.info("insertResult:{}", insertResult);
            int result = 1 / memberEntity.getAge();
        } catch (Exception e) {
            log.error("errorMsg:{}", e.getMessage());
            //回滾
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
        return insertResult;
    }
}

如上標紅代碼,如果不寫的話,事務是不會回滾的。因為事務被 catch 捕獲到了,所以只能手動的進行事務回滾。

以上就是關于“怎么使用Java @Transactional指定回滾條件”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

星座| 米脂县| 六枝特区| 海伦市| 石首市| 阳朔县| 钦州市| 凤庆县| 碌曲县| 鲁甸县| 五峰| 临桂县| 即墨市| 兴山县| 宁波市| 茌平县| 金门县| 阿巴嘎旗| 灵寿县| 双流县| 吴堡县| 广东省| 遵化市| 涪陵区| 大宁县| 泰宁县| 和硕县| 台南市| 永定县| 汝州市| 湖南省| 凤冈县| 江北区| 土默特左旗| 东宁县| 云安县| 揭西县| 荆州市| 诸城市| 苏尼特左旗| 定襄县|