Rumah  >  Soal Jawab  >  teks badan

java - Spring事务配置在service层,传播规则为required,方法中究竟应该是调用service还是多个dao比较好?

Spring中事务配置如下:

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="delete*" propagation="REQUIRED" read-only="false" 
                   rollback-for="java.lang.Exception"/>
        <tx:method name="insert*" propagation="REQUIRED" read-only="false" 
                   rollback-for="Exception" />
        <tx:method name="update*" propagation="REQUIRED" read-only="false" 
                   rollback-for="java.lang.Exception" />
        <tx:method name="save*" propagation="REQUIRED" read-only="false" 
                   rollback-for="Exception" />
        <tx:method name="*" propagation="REQUIRED" read-only="true"/>
    <:attributes>
<:advice>

现在ServiceA中有一个方法methodA,那么在ServiceA中应该注入ServiceB,ServiceC呢,还是DaoB,DaoC,然后在methodA中去保存B,C,保证B,C同时保存成功,或同时失败!


答:

既可以单独注入service,也可以单独注入dao,关键是,spring容器的事务管理默认只截获未检查异常RuntimeException。上边配置的rollback-for="java.lang.Exception"其实不用配置。配置如下

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="delete*" propagation="REQUIRED" read-only="false"  />
        <tx:method name="insert*" propagation="REQUIRED" read-only="false"   />
        <tx:method name="update*" propagation="REQUIRED" read-only="false"   />
        <tx:method name="save*" propagation="REQUIRED" read-only="false"  />
        <tx:method name="*" propagation="REQUIRED" read-only="true"/>
    <:attributes>
<:advice>

解决方案是:

try {
   .....
}catch( CheckedException e ) {
    logger.error(e);
    throw new RuntimeException(e);
}

注意,不使用try...catch...,而在方法签名后向外抛出检查型异常的行为不可取,事务也不会回滚。

迷茫迷茫2742 hari yang lalu620

membalas semua(3)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:58:29

    Jika anda ingin mengetahui lebih lanjut tentang mekanisme transaksi Spring, anda boleh membaca artikel saya ini:

    1. Penjelasan terperinci tentang Transaksi Spring - Pengasingan Transaksi

    2. Penjelasan terperinci tentang Transaksi Musim Bunga - mod Penyebaran Transaksi

    3. Penjelasan terperinci tentang Transaksi Musim Bunga - Pemulangan semula transaksi secara manual

    4. Penjelasan terperinci tentang Transaksi Musim Bunga - mekanisme pemulangan transaksi apabila pengecualian berlaku

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:58:29

    Malah, perkara seperti ini dilakukan mengikut keperluan, dan transaksi akan digabungkan secara automatik Namun, sebagai pertimbangan reka bentuk, cuba hubungi dao supaya perkhidmatan yang berbeza dapat dipisahkan.

    balas
    0
  • 黄舟

    黄舟2017-04-18 10:58:29

    Secara amnya kami mentakrifkan urus niaga dalam kaedah Service, terutamanya jika terdapat senario untuk mengawal tingkah laku penyebaran, maka meletakkan dao adalah berbeza daripada meletakkan service. Kerana dao semuanya mesti di bawah satu acara besar, service lebih rumit.

    balas
    0
  • Batalbalas