Ringkasan: Suntikan TransactionTemplate ke dalam kelas untuk menggunakan transaksi terprogram dalam springboot.
spring menyokong dua kaedah: pengurusan transaksi terprogram dan pengurusan transaksi deklaratif.
Pengurusan transaksi terprogram menggunakan TransactionTemplate atau terus menggunakan PlatformTransactionManager yang mendasari. Spring mengesyorkan menggunakan TransactionTemplate untuk mengurus transaksi pengaturcaraan.
Pengurusan transaksi deklaratif dibina pada AOP. Intipatinya adalah untuk memintas kaedah sebelum dan selepas, dan kemudian mencipta atau menyertai transaksi sebelum kaedah sasaran dimulakan Selepas kaedah sasaran dilaksanakan, urus niaga dilakukan atau digulung semula mengikut status pelaksanaan. Spring Boot mengesyorkan menggunakan anotasi @Transactional untuk melaksanakan pengurusan transaksi deklaratif.
Dalam kebanyakan kes, hanya isytiharkan anotasi @Transactional pada kaedah untuk mengisytiharkan urus niaga Ia adalah mudah, pantas dan mudah Walau bagaimanapun, kebolehkawalan urus niaga pengisytiharan @Transactional terlalu lemah, dan ia hanya boleh diisytiharkan pada kaedah atau kelas kawalan transaksi halus tidak mungkin.
Jika 10 penyata sql yang pertama bagi suatu kaedah adalah semua penyata pertanyaan pilihan, dan hanya 2 penyata sql yang terakhir adalah penyata kemas kini, maka hanya 2 penyata sql yang terakhir boleh diproses.
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency>
springboot untuk memperkenalkan pakej dependensi mybatis-spring-boot-starter.
Pakej kebergantungan mybatis-spring-boot-starter mengandungi kebergantungan spring-boot-starter-jdbc mengandungi pengurus transaksi DataSourceTransactionManager dan kelas konfigurasi suntikan automatik DataSourceTransactionManagerAutoConfiguration.
Untuk menggunakan dalam kod, hanya masukkan TransactionTemplate ke dalam kacang:
@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; } }); } }
Atas ialah kandungan terperinci Cara menggunakan springboot transaksi terprogram TransactionTemplate. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!