博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring-tx-PlatformTransactionManager(DataSourceTransactionManager)
阅读量:4303 次
发布时间:2019-05-27

本文共 1699 字,大约阅读时间需要 5 分钟。

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

//创建事务,返回该事务的状态	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容器

@AutowiredDataSourceTransactionManager txpublic 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
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);}

转载地址:http://yxhws.baihongyu.com/

你可能感兴趣的文章
netfilter/iptables全攻略
查看>>
Overlay之VXLAN架构
查看>>
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
文件拷贝(IFileOperation::CopyItem)
查看>>
MapReduce的 Speculative Execution机制
查看>>
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>
为什么linux安装程序 都要放到/usr/local目录下
查看>>
Hive安装前扫盲之Derby和Metastore
查看>>
永久修改PATH环境变量的几种办法
查看>>
大数据学习之HDP SANDBOX开始学习
查看>>
Hive Beeline使用
查看>>
Centos6安装图形界面(hdp不需要,hdp直接从github上下载数据即可)
查看>>