公式ウェブサイト:https://www.codingapi.com/docs/home/
原理:
公式サイトへお越しください
使用:
エウレカ。
1 つの TM と 2 つの RM は、それぞれ注文サービスと支払いサービスです。
詳しい設定については公式サイトをご覧ください。
注文サービスコントローラー:
@PostMapping("/add-order")
@Transactional(rollbackFor = Exception.class)
@LcnTransaction
public String add(@RequestBody TblOrder bean){
JSONObject date = new JSONObject();
date.put("payName",bean.getOrderName()+"pay");
restTemplate.postForEntity("http://lcn-pay/add-pay",date,String.class);
int i = 1/0;
tblOrderDao.insert(bean);
return "新增订单成功";
}
支払いサービス管理者:
@PostMapping("/add-pay")
@Transactional(rollbackFor = Exception.class)
@LcnTransaction
public String addPay(@RequestBody TblPay bean){
tblPayDao.insert(bean);
// int i = 1/0;
return "新增支付成功";
}
@LcnTransaction を追加するだけです
ソースコード
1 エントリ:
aop アスペクト クラスを使用して
TransactionAspect
をインターセプトし、トランザクション メッセージを取得します。
実行プロセス:
トランザクション コンテキストがあるかどうかを判断し、存在する場合は
親コンテキスト
を取得し、存在しない場合は作成し、トランザクションの
開始者であるかどうかを判断します。
キャッシュを
クリックすると、Map<String, Object> singlePropCache になります。
startxx の一般的なフレームワークとは何ですか。
ほとんどのキャッシュには、
endXX
clearXX
cleanXX
destoryXXが含まれます
。 コードをプルダウンします。
破棄メソッドを見つけます
。 実行後、次のコンテキスト情報を削除します。最後に
、コンテキスト情報を取得し、一連のパラメーターを設定し、何とか、キーポイントを入力します。
DTXServiceExecutor #transactionRunning
トランザクション伝播ステータスの取得
トランザクション操作の
開始前実行前トランザクション開始者は
トランザクショングループを初期化します
トランザクション参加者は何も実行しません
ビジネスの実行
とは、 @LcnTransaction アノテーションによって変更されたメソッドの内容を実行します
実行は正常に完了しました:
トランザクション開始者:
状態を 1 に設定します
トランザクション参加者:
トランザクション グループに参加します
実行失敗:
トランザクション開始者:
ステータスを 0 に設定
トランザクション参加者:
トランザクション情報を削除
実行完了:内部をクリックするように
TM に通知:
2 LCN はどのように操作データベース接続を取得しますか?
DataSourceAspect は
データベース接続の取得時にインターセプトします:
プロキシを実行し、さまざまな種類のトランザクションのデータベース接続を自分でパッケージ化します
。LCN を例に挙げます:
自分のデータを返し、プロキシ クラスに接続します:
独自の処理を行います。一般的なプロセスは
ほぼ次のとおり
です。 TCC モードについてもう一度見てみましょう。
興味があれば一緒に議論してください。