Maison  >  Article  >  Java  >  Comment utiliser la transaction programmatique Springboot TransactionTemplate

Comment utiliser la transaction programmatique Springboot TransactionTemplate

PHPz
PHPzavant
2023-06-01 17:40:242048parcourir

Utilisation de TransactionTemplate

Résumé : Injecter TransactionTemplate dans la classe pour utiliser des transactions programmatiques dans Springboot.

spring prend en charge à la fois la gestion programmatique des transactions et la gestion déclarative des transactions.

La gestion programmatique des transactions utilise TransactionTemplate ou utilise directement le PlatformTransactionManager sous-jacent. Spring recommande d'utiliser TransactionTemplate pour gérer les transactions de programmation.

La gestion déclarative des transactions est construite sur AOP. Son essence est d'intercepter la méthode avant et après, puis de créer ou de rejoindre une transaction avant le démarrage de la méthode cible. Une fois la méthode cible exécutée, la transaction est validée ou annulée en fonction de l'état d'exécution. Spring Boot recommande d'utiliser l'annotation @Transactional pour implémenter la gestion déclarative des transactions.

1.Pourquoi l'utiliser ?

Dans la plupart des cas, il suffit de déclarer l'annotation @Transactional sur la méthode pour déclarer la transaction. Cependant, la contrôlabilité de la transaction déclarative @Transactional est trop faible. et ne peut être utilisé que sur la méthode ou la classe, un contrôle précis des transactions n'est pas possible.

Si les 10 premières instructions SQL d'une méthode sont toutes des instructions de requête de sélection et que seules les 2 dernières instructions SQL sont des instructions de mise à jour, alors seules les 2 dernières instructions SQL peuvent être traitées.

2. Comment utiliser

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>

springboot pour introduire le package de dépendances mybatis-spring-boot-starter.

mybatis-spring-boot-starter package de dépendances contient les dépendances de spring-boot-starter-jdbc, spring-boot-starter-jdbc contient le gestionnaire de transactions DataSourceTransactionManager et la classe de configuration d'injection automatique DataSourceTransactionManagerAutoConfiguration.

Utilisé dans le code, injectez simplement TransactionTemplate dans le 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();
        });
    }
}

TransactionTemplate est simple à utiliser

/**
 * 事务模板
 * @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,&#39;aaa&#39;,&#39;aaa&#39;,&#39;aaa&#39;)"); 
        int i = 1/0; 
        jdbcTemplate.execute("insert into user value (2,&#39;aaa&#39;,&#39;aaa&#39;,&#39;aaa&#39;)"); 
    } 
 
    public void test2(){ 
      getRequiresNewTransactionTemplate()
      //  transactionTemplate
                .execute(new TransactionCallback<Void>() {
 
            @Override
            public Void doInTransaction(TransactionStatus status) {  
                jdbcTemplate.execute("insert into user value (11,&#39;BBBB&#39;,&#39;aaa&#39;,&#39;aaa&#39;)");
 
                int i = 1/0; 
                jdbcTemplate.execute("insert into user value (21,&#39;aaa&#39;,&#39;NNNN&#39;,&#39;aaa&#39;)");  
                return null;
            }
        });
    }  
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer