Heim  >  Artikel  >  Java  >  So verwenden Sie die programmgesteuerte Springboot-Transaktion TransactionTemplate

So verwenden Sie die programmgesteuerte Springboot-Transaktion TransactionTemplate

PHPz
PHPznach vorne
2023-06-01 17:40:242048Durchsuche

Verwendung von TransactionTemplate

Zusammenfassung: Injizieren Sie TransactionTemplate in die Klasse, um programmgesteuerte Transaktionen in Springboot zu verwenden.

spring unterstützt zwei Methoden: programmatisches Transaktionsmanagement und deklaratives Transaktionsmanagement.

Programmatische Transaktionsverwaltung verwendet TransactionTemplate oder direkt den zugrunde liegenden PlatformTransactionManager. Spring empfiehlt die Verwendung von TransactionTemplate zum Verwalten von Programmiertransaktionen.

Deklaratives Transaktionsmanagement basiert auf AOP. Sein Kern besteht darin, die Methode vorher und nachher abzufangen und dann eine Transaktion zu erstellen oder ihr beizutreten, bevor die Zielmethode ausgeführt wird. Nachdem die Zielmethode ausgeführt wurde, wird die Transaktion entsprechend dem Ausführungsstatus festgeschrieben oder zurückgesetzt. Spring Boot empfiehlt die Verwendung der Annotation @Transactional, um eine deklarative Transaktionsverwaltung zu implementieren.

1. Warum es verwenden?

In den meisten Fällen reicht es aus, die @Transactional-Annotation für die Deklaration der Transaktion zu deklarieren. Die Steuerbarkeit der deklarativen @Transactional-Transaktion ist jedoch zu schwach hängt von der Methode oder Klasse ab und kann nicht detailliert beschrieben werden.

Wenn die ersten 10 SQL-Anweisungen einer Methode alle Select-Query-Anweisungen sind und nur die letzten 2 SQL-Anweisungen Update-Anweisungen sind, können nur die letzten 2 SQL-Anweisungen verarbeitet werden.

2. So verwenden Sie

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

, um das Abhängigkeitspaket mybatis-spring-boot-starter in Springboot einzuführen.

Das mybatis-spring-boot-starter-Abhängigkeitspaket enthält die Abhängigkeiten von spring-boot-starter-jdbc, enthält den DataSourceTransactionManager-Transaktionsmanager und die automatische Injektionskonfigurationsklasse DataSourceTransactionManagerAutoConfiguration.

Zur Verwendung im Code fügen Sie einfach TransactionTemplate in die Bean ein:

@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 ist einfach zu verwenden

/**
 * 事务模板
 * @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;
            }
        });
    }  
}

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die programmgesteuerte Springboot-Transaktion TransactionTemplate. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen