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