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

Comment utiliser la transaction programmatique Springboot TransactionTemplate

PHPz
Libérer: 2023-06-01 17:40:24
avant
2100 Les gens l'ont consulté

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>
Copier après la connexion

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();
        });
    }
}
Copier après la connexion

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;
	} 
}
Copier après la connexion
 @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;
            }
        });
    }  
}
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal