Administrator
发布于 2025-10-10 / 28 阅读
0
0

JdbcTemplate手动事务

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.web.client.RestTemplate;

@Service
public class Test {

	@Autowired
	private JdbcTemplate jdbcTemplate;

	@Autowired
	private DataSourceTransactionManager transactionManager;

	/**
	 * 开启事务
	 *
	 * @return
	 */
	public TransactionStatus begin() {
		return beginTransaction(transactionManager);
	}

	/**
	 * 开启事务
	 */
	public TransactionStatus beginTransaction(DataSourceTransactionManager transactionManager) {
		DefaultTransactionDefinition def = new DefaultTransactionDefinition();// 事务定义类
		def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
		TransactionStatus status = transactionManager.getTransaction(def);// 返回事务对象
		return status;
	}

	/**
	 * 提交事务
	 *
	 * @param status
	 */
	public void commit(TransactionStatus status) {
		commitTransaction(transactionManager, status);
	}

	/**
	 * 提交事务
	 *
	 * @param transactionManager
	 * @param status
	 */
	public void commitTransaction(DataSourceTransactionManager transactionManager, TransactionStatus status) {
		transactionManager.commit(status);
	}

	/**
	 * application
	 * 
	 * @return
	 */
	@Bean
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}

	/**
	 * 回滚事务
	 *
	 * @param status
	 */
	public void rollback(TransactionStatus status) {
		rollbackTransaction(transactionManager, status);
	}

	/**
	 * 事务回滚
	 *
	 * @param transactionManager
	 * @param status
	 */
	public void rollbackTransaction(DataSourceTransactionManager transactionManager, TransactionStatus status) {
		transactionManager.rollback(status);
	}

	public void test() {
		TransactionStatus transStatus = null;
		try {
			transStatus = begin();

			// TODO do something
			jdbcTemplate.update("select 1 from dual");

			commit(transStatus);
		} catch (Exception e) {
			if (transStatus != null) {
				rollback(transStatus);
			}
		}
	}
}


评论