22.04.13から22.04.14 WIL JDBCとTransaction
なぜ取引が必要ですか?
例えば2人でそれぞれ10万元あって、友達に送金する場合があります.
データベースはこのようにクエリーされます.update member set money = 100000 - 30000 where member_id = ‘me’;
update member set money = 100000 + 30000 where member_id = ‘you’;
クエリーが終了するたびに自動的にコミットされると(2行目にSQLExceptionが発生した場合)、「me」のお金は逃げてしまい、「you」はお金を受け取っていません.(大変なことになった!)
このように、ビジネスロジックが実行されると、タスクのように実行する必要があります.その役割は、アクションを安全に処理することです.
トランザクションACID
update member set money = 100000 - 30000 where member_id = ‘me’;
update member set money = 100000 + 30000 where member_id = ‘you’;
トランザクションの伝播
トランザクション伝播は、ビジネスロジックのトランザクション範囲を定義します.
Springは、伝播設定に基づいてトランザクションを管理します.
トランザクションの伝播タイプ
出典:Transactional propagation isolation
トランザクション独立性レベル
トランザクション・アイソレーションの成功度の測定
独立性レベルが設定されていない場合は、使用するDBMSで設定したIsolation値に従います.
出典:transaction-isolation-level
PlatformTransactionManager
次に、ビジネスロジックからTransactionが必要な理由と、それをどのように適用するかを理解しました.
Transactionを使用するには、次のように記述します.
ただし,JDBC,JPAなどのトランザクションを適用するコードは異なる.JDBCを使用するときにJPAに変更する必要がある場合は、上記のすべてのコードを変更する必要があります.これは恐ろしいことです.
OCPの原則を遵守するためにSpringはPlatformTransactionMangerというインタフェースとして抽象化し、このインタフェースを通じてトランザクションを実現することができます.
Spring Transaction Abstraction
TransactionTemplate
JdbcTemplateがTemplate CalbackメソッドでRepositoryセクションの重複コードを削除したように.
TransactionもTransactionTemplateでサポートされています.
TransactionTemplateの使用方法
@Transactional
@TransactionalはSpring AOPテクノロジーを使用したプレゼンテーションで、重複するコードを削除し、ビジネスロジックのみを記述するのに役立ちます.
TransactionTemplateを使用すると、トランザクションは簡単に実行できますが、サービス層にはビジネスロジックに関係のないコードが含まれています.@transactionalを使用します.ビジネスロジックでコードを記述するしかありませんので、@transactionalを使用してください.
追加
TransactionTemplateを使用してトランザクションをプログラミングで管理
@Transactional宣言トランザクション管理
に表示されます.
Reference
この問題について(22.04.13から22.04.14 WIL JDBCとTransaction), 我々は、より多くの情報をここで見つけました https://velog.io/@jk05018/22.04.18-WIL-JDBC와-Transactionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol