概要: TransactionTemplate をクラスに挿入して、スプリングブートでプログラムによるトランザクションを使用します。
spring は、プログラムによるトランザクション管理と宣言的なトランザクション管理という 2 つの方法をサポートしています。
プログラムによるトランザクション管理では、TransactionTemplate を使用するか、基盤となる PlatformTransactionManager を直接使用します。 Spring では、プログラミング トランザクションを管理するために TransactionTemplate を使用することを推奨しています。
宣言型トランザクション管理は AOP に基づいて構築されています。その本質は、前後のメソッドをインターセプトし、対象のメソッドが開始される前にトランザクションを作成または参加し、対象のメソッドの実行後、実行状況に応じてトランザクションをコミットまたはロールバックすることです。 Spring Boot では、 @Transactional アノテーションを使用して宣言型トランザクション管理を実装することをお勧めします。
ほとんどの場合、メソッド上で @Transactional アノテーションを宣言するだけでトランザクションを宣言でき、簡単かつ高速で便利ですが、@Transactional 宣言型トランザクションの制御性は非常に弱く、メソッドまたはクラスで宣言されるため、きめ細かいトランザクション制御は不可能です。
メソッドの最初の 10 の SQL ステートメントがすべて選択クエリ ステートメントであり、最後の 2 つの SQL ステートメントのみが更新ステートメントである場合、最後の 2 つの SQL ステートメントのみを処理できます。
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency>
を使用して mybatis-spring-boot-starter 依存関係パッケージを springboot に導入する方法。
mybatis-spring-boot-starter 依存関係パッケージには、spring-boot-starter-jdbc の依存関係が含まれています。spring-boot-starter-jdbc には、DataSourceTransactionManager トランザクション マネージャーと自動インジェクション構成クラス DataSourceTransactionManagerAutoConfiguration が含まれています。
コードで使用する場合は、TransactionTemplate を Bean に挿入するだけです:
@Service public class TestServiceImpl { @Resource private TransactionTemplate transactionTemplate; public Object testTransaction() { //数据库查询 dao.select(1); return transactionTemplate.execute(status -> { //数据库新增 dao.insert(2); dao.insert(3); return new Object(); }); } }
/** * 事务模板 * @author zz * */ public class TransactionTemplateSupport { @Autowired private PlatformTransactionManager transactionManager; private TransactionTemplate requiredTransactionTemplate; protected TransactionTemplate getRequiresNewTransactionTemplate(){ if (requiredTransactionTemplate == null){ requiredTransactionTemplate = new TransactionTemplate(transactionManager); requiredTransactionTemplate.setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRED); // requiredTransactionTemplate.setReadOnly(true); // requiredTransactionTemplate.setTimeout(30000); } return requiredTransactionTemplate; } }
@Service public class TestTransaction extends TransactionTemplateSupport { @Autowired private JdbcTemplate jdbcTemplate ; @Autowired private TransactionTemplate transactionTemplate; // @Transactional public void test(){ jdbcTemplate.execute("insert into user value (1,'aaa','aaa','aaa')"); int i = 1/0; jdbcTemplate.execute("insert into user value (2,'aaa','aaa','aaa')"); } public void test2(){ getRequiresNewTransactionTemplate() // transactionTemplate .execute(new TransactionCallback<Void>() { @Override public Void doInTransaction(TransactionStatus status) { jdbcTemplate.execute("insert into user value (11,'BBBB','aaa','aaa')"); int i = 1/0; jdbcTemplate.execute("insert into user value (21,'aaa','NNNN','aaa')"); return null; } }); } }
以上がSpringboot プログラムによるトランザクション TransactionTemplate の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。