Spring Boot Transaction Managementでは、Self Interface PlatformTransactionManagerを実装します。
Public Interface PlatformTransactionManager {org.springframework.transaction.transactionstatus getTransaction(org.springframework.transaction.transactiondefinition transactionDefinition)org.springframework.transaction.transaction.transactionexception; void commit(org.springframework.transaction.transactionStatus transactionStatus)throws org.springframework.transaction.transactionexception; void rollback(org.springframework.transaction.transactionstatus transactionStatus)org.springframework.transaction.transactionexception;}Spring-Boot-Starter-JDBC依存関係を使用すると、フレームワークはデフォルトでDataSourcetransactionManagerを自動的に挿入します。したがって、トランザクションの使用に@TransactionAl Annotationを使用するための追加の構成は必要ありません。
JDBCトランザクションマネージャー
使用中、@Transactionalによって注釈が付けられたメソッドは、トランザクションをサポートします。注釈がクラスにある場合、クラス全体のすべての方法はデフォルトでトランザクションをサポートします。
マルチトランザクションマネージャーの状況
1:TransactionManagementConfigurerインターフェイスを実装でき、内部のメソッドの返品値はデフォルトのトランザクションマネージャーです。
2:特定の実行方法で値を設定できます
Springコンテナに複数のPlatformTransactionManagerインスタンスがあり、インターフェイスTransactionManagementConfigurerがデフォルト値を指定するために実装されていない場合、メソッドでAnnotation @Transactionalを使用する場合、値で指定する必要があります。指定されていない場合、例外がスローされます。
//@enabletransactionManagement // Annotation Transaction Managementをオンにします。これは<Tx:Annotation-Driven />@SpringBootApplicationPublic Class Application TransactionManagementConfigurerに相当します。 // Transaction Managerを手動で作成する1 DataSourceフレームワークは自動的に注入されます//スプリングコンテナで@Beanが最初にロードされ、フレームワークは他のPlatformTransactionManagerの実装クラスを再インドしません。 @bean(name = "txmanager1")public platformtransactionmanager txmanager(datasource datasource){return new datasourcetransactionmanager(dataSource); } // transactionManager 2 @bean(name = "txmanager2")public platformtransactionmanager txmanager2(entitymanageractory Factory){return new JPatransactionManager(Factory); } //インターフェイストランザクションManagementConfigurerメソッドを実装します。その返品値は、デフォルトで使用されるトランザクションマネージャーを複数のトランザクションマネージャーがいる場合に使用されるトランザクションマネージャーを表します。 } public static void main(string [] args){springApplication.run(profiledemoapplication.class、args); }}特定の実装
@componentPublic class devsendmessageはsendmessageを実装します{//値を使用して、@transactional(value = "txmanager1")@override public void send(){system.out.println( ">>>>>>>>>>>>>>>> dev( send2(); } @transactional public void send2(){system.out.println( ">>>>>>>>>>>> dev send2()<<<<<<<"); }}分離レベル
public enum Isolation {default(transactionDefinition.isolation_Default)、read_uncommitted(transactionDefinition.isolation_read_uncommitted)、read_committed(transactiondefinition.isolation_read_committed)、Repeationable_read(transactionDefinition.isolation_repeatable_read)、 Serializable(transactionDefinition.isolation_Serializable);プライベート最終的なINT値。 Isolation(int value){this.value = value; } public int value(){return this.value; }}指定方法:分離プロパティを使用して設定します。
@Transactional(Isolation = Isolation.Default)
コミュニケーション行動
いわゆるトランザクション伝播動作は、現在のトランザクションが開始される前にトランザクションコンテキストがすでに存在する場合、トランザクションメソッドの実行動作を指定できるいくつかのオプションがあることを指します。
org.springframework.transaction.annotation.propagation列挙クラスは、伝播動作を表す6つの列挙値を定義することがわかります。
public enum cropagation {rebuly(transactiondefinition.propagation_required)、supports(transactiondefinition.propagation_supports)、必須(transactiondefinition.propagation_mandatory)、reques_new(transactiondefinition.propagation_new)、 not_supported(transactionDefinition.propagation_not_supported)、never(transactionDefinition.propagation_never)、nested(transactionDefinition.propagation_nested);プライベート最終的なINT値。伝播(int値){this.value = value; } public int value(){return this.value; }}必須:トランザクションが現在存在する場合は、トランザクションに参加します。現在トランザクションがない場合は、新しいトランザクションを作成します。デフォルト値。
サポート:トランザクションが現在存在する場合は、トランザクションに参加します。現在トランザクションがない場合は、非遷移的な方法で実行を続けます。
必須:トランザクションが現在存在する場合は、トランザクションに参加します。現在トランザクションがない場合、例外がスローされます。 (トランザクションに入れることを余儀なくされました)
rebyes_new:新しいトランザクションが作成され、トランザクションが現在存在する場合、現在のトランザクションは停止されます。 (ログの印刷が頻繁に使用されます。以前のロールバックがロールバックされたとしても、トランザクションが実行され、エラーメッセージが記録されます)
not_supported:非伝統的な方法で実行します。トランザクションが現在存在する場合、現在のトランザクションは停止されます。
決して:トランザクションが現在存在する場合は、非伝統的な方法で実行され、例外をスローします。
ネスト:トランザクションが現在存在する場合、トランザクションが作成され、現在のトランザクションのネストされたトランザクションとして実行されます。現在トランザクションがない場合、値は必要に相当します。
指定方法:伝播プロパティを使用して設定します。
@transactional(propagation = propagation.required)
トランザクションはロールバックの状況ではありません
猛攻撃のruntimeexceptionが発生した場合にのみロールバックします
両方の挿入が発生すると、キャッチによってスローされる例外は成功します
@override @transactional public void insertandInsert(スタッフスタッフ){staffdao.insert(staff); try {int i = 1/0; } catch(Exception e){e.printstacktrace(); } staffdao.insert(スタッフ); }サービスレイヤーメソッドのキャッチステートメントに追加:transactionAspectSupport.CurrentTransactionStatus()。setrollbackonly();ステートメント、マニュアルロールバックはデータを挿入しません
@override @transactional public void insertandInsert(スタッフスタッフ)スロー例外{try {staffdao.insert(stuff); int i = 1/0; staffdao.insert(スタッフ); } catch(Exception e){transactionAspectSupport.CurrentTransactionStatus()。setRollBackonly(); }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。