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

Cara menggunakan springboot transaksi terprogram TransactionTemplate

PHPz
Lepaskan: 2023-06-01 17:40:24
ke hadapan
2100 orang telah melayarinya

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>
Salin selepas log masuk

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();
        });
    }
}
Salin selepas log masuk

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;
	} 
}
Salin selepas log masuk
 @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;
            }
        });
    }  
}
Salin selepas log masuk

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

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan