Rumah  >  Artikel  >  Java  >  Cara menggunakan springboot transaksi terprogram TransactionTemplate

Cara menggunakan springboot transaksi terprogram TransactionTemplate

PHPz
PHPzke hadapan
2023-06-01 17:40:242048semak imbas

Penggunaan TransactionTemplate

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.

1. Mengapa menggunakannya?

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.

2. Cara menggunakan

        <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();
        });
    }
}

TransactionTemplate mudah digunakan

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

Atas ialah kandungan terperinci Cara menggunakan springboot transaksi terprogram TransactionTemplate. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam