事務のSpringboot手動制御

  まず、業務の重要性は、私が実際の開発プロセスでは、深い理解を持っていると信じています。しかし、我々は多くの場合、通常の状況下で、業務を制御するトランザクションベースの制御ばね事務の7種類の間の調整に端的に言えば、注釈の方法で開発されているという問題がありました。

  二、春の繁殖行動総務7

Propagation.REQUIRED 現在の現在のトランザクションに代わって支援の方法、および呼び出し側が同じトランザクションのコンテキストにあるが、統一されたロールバックをロールバック、その後、自分自身トランザクションがない場合、(現行法は時に他のメソッドを呼び出された場合、呼び出し元自体が業務を持っています)新しいトランザクション、
Propagation.SUPPORTS 現在の現在のトランザクションに代わって支援の方法、および呼び出し側は同じトランザクションのコンテキストであり、統一されたロールバックをロールバックトランザクションがない場合、(現在のメソッドがときに、他の方法で呼び出され、呼び出し側自体が業務を持っている場合)、非トランザクションのコンテキストで実行する方法
Propagation.MANDATORY 現在の現在のトランザクションに代わって支援の方法、および呼び出し側が同じトランザクションのコンテキストにあるが、統一されたロールバックをロールバックトランザクションがない場合、トス、(現在の方法は、時に他のメソッドを呼び出された場合、呼び出し元自体が業務を持っています)異常な
Propagation.REQUIRES_NEW 現在のメソッドの呼び出し元がトランザクション、保留中のトランザクションの発信者となっている場合、2つのトランザクションが、同じコンテキストではありませんが、新しいトランザクションコンテキストを作成し、それぞれの例外が発生した場合、各ロールバック
Propagation.NOT_SUPPORTED このメソッドの呼び出しは、トランザクションは、呼び出し元のトランザクションの前に保留されている場合、このメソッドは、呼び出し側の非トランザクション状態で行われます
Propagation.NEVER 発信者のトランザクションが存在する場合の方法は、例外がスローされ、実行の非トランザクション状態です
Propagation.NESTED 現在のコンテキスト内のトランザクションがある場合は、この方法を実行するためのネストされたトランザクションを置く、と言うことです。この方法を自分自身が、その後、もし異常このメソッドはメソッド、呼び出し側のロールバック、ロールバックメソッドの外側部分の一部ですが、ロールバックは、トランザクションが存在しない場合は、外部の業務に影響を与え、そしてPROPAGATION_REQUIREDなどはありません

  三つ、四つの機能とデータベースMySQLのトランザクション分離レベル

  1)は、4つの特性  

  、アトミック(不可分)
  原子性は、すべての操作はすべて成功するか、すべてロールバック失敗のいずれかのトランザクションに含まれていることを意味します。

  bは、一貫性(一貫性)
  一貫性は、トランザクションが別の一貫した状態にある一貫した状態からデータベースを変換する必要があることを意味し、それは、トランザクションの実行と実装が一貫性のある状態でなければなりません前と後と言うことです。

  C、分離(単離)
  単離、そのようなテーブルを用いて動作するようユーザデータベースへの同時アクセスを、複数の、各ユーザのトランザクションのデータベースをオープン、操作は同時複数のトランザクションの間に他のトランザクションによって妨害されていない場合であります互いに分離されます。

  D、永続性(耐久性)
  永続一度トランザクションがコミットされたことを意味し、その後、データベース内のデータへの変更は永久的である、トランザクションをコミットしても、データベース・システムの場合には失われない操作の失敗を経験しました。

  2)分離レベル

  

  、ダーティリード手段は、他ではコミットされていないトランザクションのトランザクション処理データを読み込みます。(非コミット読み取り)

  Bは、複数のクエリの範囲内のデータトランザクションのための非反復リードデータベースを指すが、改変および他のトランザクションに提出された間隔をポーリングすることによるものであり、異なるデータ値を返します。(書き込みながら読みます)

  C、ファントム読み取りは、2つの同時実行のトランザクションを指し、2つのトランザクションがデータを変更、データが独自の修正を開始するためのデータではありませんお読みください。ファントムは読み込み、非反復可能読み取り(これはダーティリードとは異なる)、差がある非反復可能読み取りクエリデータ項目は同じですが、グループのための読書のマジック提出された別のトランザクションを読んでいますデータ全体。(書いている間、および読み取り)

  3)データベースのトランザクション・レベルは、デフォルトの反復可能読み取りレベル、ボトムアップからのリストのレベル、より低いレベルを使用。ビューレベル

選択 @@ tx_isolationを

  第四に、トピックは、春の総務・データベースのトランザクション分離レベルより上の書き込み、主な目的は、制御されたときに、春はトランザクションとロールバックを達成するための業務または関係になるように、転送トランザクションの間に存在する関係を理解することです提出の効果。

  時間は(など、マルチスレッドなど)のアノテーションを使用する方法はありません場合は第五、その後、トランザクション管理を行うためのマニュアルの方法を使用しており、これはプログラムによるトランザクション管理

  1)まず、注釈を追加し、これは春に設け方法JDBCトランザクション管理フレームワークであります

    @Autowired
     プライベートPlatformTransactionManager platformTransactionManager。

    @Autowired 
    プライベート TransactionDefinitionのtransactionDefinition。

   2)ソースコードを見る(DataSourceTransactionManagerAutoConfiguration.class、TransactionTemplate.class)

        @Bean 
        @ConditionalOnMissingBean({。PlatformTransactionManager クラス})
         パブリックDataSourceTransactionManagerのTransactionManager(DataSourceProperties特性){ 
            DataSourceTransactionManagerのTransactionManager = 新しい DataSourceTransactionManager(この.dataSource)。
            もしこの!.transactionManagerCustomizers = ヌル){
                 この.transactionManagerCustomizers.customize(トランザクションマネージャー)。
            } 

            戻りのTransactionManagerと、
        }

  注意:見つけることができます興味があるDataSourceTransactionManagerの文言と原則を。

        @Bean
        @ConditionalOnMissingBean
        public TransactionTemplate transactionTemplate() {
            return new TransactionTemplate(this.transactionManager);
        }

  注意,这里的所有事务传播方式包括处理,都需要自己手动去处理。

  3)编写方式

TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
platformTransactionManager.commit(transactionStatus);
platformTransactionManager.rollback(transactionStatus);

  说明:这里开发事务过后,返回一个事务状态,这个状态记录了东西,用来控制事务的管理,当然,多个事务之间的控制需要人为控制。

  

 

   4)编程式的事务控制经量少用,因为控制程度上面来说spring的方式还是来的更加不错,编程式的方式,更多用于在需要事务的时候,没有办法加入事务,才采取手动控制事务的方式。

 

おすすめ

転載: www.cnblogs.com/ll409546297/p/11076258.html