Spring-tx-PlatformTransactionManager(DataSourceTransactionManager)

事务管理接口,负责事务的创建,提交,回滚,三个操作

	//创建事务,返回该事务的状态
	TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException;

	//提交事务,具体提交哪个事务,由参数status决定
	void commit(TransactionStatus status) throws TransactionException;
	//事务回滚,滚到哪里,由参数status决定,也可以理解由
	//TransactionStatus中的savepoint属性决定
	void rollback(TransactionStatus status) throws TransactionException;

PlatformTransactionManager接口最重要的实现类是DataSourceTransactionManager,下面的事例使用该实现类演示事务的提交

示例1:手动提交事务,这个例子依赖于spring容器

@Autowired
DataSourceTransactionManager tx

public void aa(){
	DefaultTransactionDefinition def=new DefaultTransactionDefinition();
	//这个地方可以根据自己需要选择传播行为和隔离级别
	def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
	TransactionStatus status=tx.getTransaction(def);
	try{
	自己的各种业务操作
	tx.commit();//然后这里提交
	}catch(Exception e){
	tx.rollback(status);//报错这里回滚
	}
}

示例2:要想理解spring,就不应该依赖spring容器,同样是个手动提交事务,下面这个例子不再依赖spring容器

public static void main(String[] args) throws SQLException {
	HikariDataSource ds = new HikariDataSource();
	ds.setJdbcUrl("jdbc:mysql://localhost:3306/swttest?serverTimezone=UTC&&useSSL=false");
	ds.setUsername("root");
	ds.setPassword("123456");
	PlatformTransactionManager manager = new DataSourceTransactionManager(ds);
	DefaultTransactionAttribute td = new DefaultTransactionAttribute();
	TransactionStatus status = manager.getTransaction(td);

	Map<Object, Object> resourceMap = TransactionSynchronizationManager.getResourceMap();
	ConnectionHolder connectionHolder = (ConnectionHolder) resourceMap.get(ds);
	Connection conn = connectionHolder.getConnection();
	conn.prepareStatement("insert into t1(value) values ('二抱三抱是真抗冻')").execute();
	manager.commit(status);
	// manager.rollback(status);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值