Springbootトランザクション注記@Transactional(rollbackFor=Exception.class)をオンにしますが、トランザクションはまだ有効ではなく、ロールバックに失敗しました

1743 ワード

一、業務シーン
1、springbootはプロジェクトを構築し、一部のクエリー方法ではトランザクションを開く必要がないため、サービス実装クラスに直接追加するのではなく、サービス実装クラスのいくつかのトランザクションが必要な方法にトランザクションロールバック注釈@Transactional(rollbackFor=Exception.class)を追加するが、ビジネスを操作する際に同時に複数のテーブルにデータを挿入し、1つの挿入異常があり、他の挿入は正常で、トランザクションが正常な場合、正常なデータを挿入するとロールバックされ、データベースに保存されません.ただし、例外の場合、コードの作成が適切でない場合やテーブルのエンジンが間違っている場合、トランザクションは有効になりません.
二、異常状況処理
1、コードの作成が適切ではありません.方法:try-catch例外が取得された場合、catch文ブロックに例外を手動で投げ出す必要があります.そうしないと、トランザクションは失敗します.たとえば、次のようにします.
/**
 * 

 *            
 * 
*
* @author Mr.Qu
* @since 2020-01-07
*/
@Slf4j
@Service
public class GatewayServiceImpl extends BaseServiceImpl implements GatewayService {
@Autowired
private GatewayMapper gatewayMapper;
@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveGateway(Gateway gateway) throws Exception {
boolean res = false;
try {
res= super.save(gateway);
//ここに を する
int a = 100/0;
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return res;
}
}
:@Transactional はpublic のメソッドにのみ され、protected、private のメソッドでは しません.
2、データベースにおける の に がある
データベース・ストレージ・エンジンの
とくせい
InnoDB
MyISAM
MEMORY
トランザクションのセキュリティ
サポート
なし
なし
ストレージの
64TB
あります
あります
スペースの



メモリ



データの



キーのサポート
サポート
なし
なし
の から、InnoDBはトランザクションをサポートし、 りの2つはトランザクションをサポートしていないことがわかりました.
で した のエンジンがInnoDBであるかどうかを します.
、show TABLE STATUS FROMあなたのデータベース WHERE name='あなたの ';
2、マウスで を して クリックし、デザイン を し、オプションをクリックします. の が えます.