事务API实现demo
业务开发中我们常常使用申明是事务,那么申明式事务到底是如何运作的呢,这就像一个黑盒,我们可以参考编程式事务的方式来了解其具体实现。
只有一个事务操作
public static DataSource getDs() {DruidDataSource ds = new DruidDataSource();ds.setUsername("root");ds.setPassword("root");ds.setUrl("jdbc:mysql://192.168.127.147:3306?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false");ds.setDriverClassName("com.mysql.jdbc.Driver");return ds;
}
private static void txDemo01() throws SQLException {DataSource ds = getDs();DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(ds);// 创建事务定义信息DefaultTransactionDefinition transactionDefinition = new DefaultTransactionDefinition();// 开启事务TransactionStatus transactionStatus = transactionManager.getTransaction(transactionDefinition);// 获取物理连接Connection connection = DataSourceUtils.getConnection(ds);// 执行业务PreparedStatement ps = connection.prepareStatement("select * from ds0.test limit 1");ps.execute();ResultSet resultSet = ps.getResultSet();while (resultSet.next()) {long id = resultSet.getLong("id");String userName = resultSet.getString("user_name");System.out.printf("id = %d, userName = %s\n", id, userName);}// 提交事务transactionManager.commit(transactionStatus);
}
包含多个事务操作
public static DataSource getDs() {DruidDataSource ds = new DruidDataSource();ds.setUsername("root");ds.setPassword("root");ds.setUrl("jdbc:mysql://192.168.127.147:3306?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false");ds.setDriverClassName("com.mysql.jdbc.Driver");return ds;
}public static void main(String[] args) throws SQLException {// txDemo01();DataSource ds = getDs();DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(ds);// 创建事务定义信息DefaultTransactionDefinition transactionDefinition = new DefaultTransactionDefinition();transactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);// 开启事务TransactionStatus transactionStatus = transactionManager.getTransaction(transactionDefinition);//JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);jdbcTemplate.execute("insert into ds0.user(user_name,age) values('jack3',32)");// 新建连接事务DefaultTransactionDefinition definition2 = new DefaultTransactionDefinition();definition2.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);TransactionStatus transactionStatus2 = transactionManager.getTransaction(definition2);JdbcTemplate jdbcTemplate2 = new JdbcTemplate(ds);jdbcTemplate2.execute("insert into ds0.grade(user_id,grade) values(2,79)");// 回滚事务2transactionManager.rollback(transactionStatus2);// 提交事务1transactionManager.commit(transactionStatus);
}
事务API实现demo相关推荐
- kafka系列九、kafka事务原理、事务API和使用场景
一.事务场景 最简单的需求是producer发的多条消息组成一个事务这些消息需要对consumer同时可见或者同时不可见 . producer可能会给多个topic,多个partition发消息,这些 ...
- [JTA] Java事务api
JTA和JTS Java事务API(JTA:Java Transaction API)和它的同胞Java事务服务(JTS:Java Transaction Service),为J2EE平台提供了分布式 ...
- ArangoDB 3.5发布:流事务API、蒙面数据、搜索性能大幅提升、最短路径功能
ArangoDB 3.5 发布了.ArangoDB 是一个分布式原生的多模型数据库,具有灵活的文档.图形和键值数据模型.使用方便的 SQL 查询语言或 JavaScript 扩展构建高性能应用程序. ...
- 【转载】Elasticsearch客户端API使用Demo
Elasticsearch客户端API使用Demo, 转载自官方文档, 以索引雇员文档为示例, 在命令行使用curl演示了一系列的Restful API操作. 1.索引雇员文档 第一个业务需求就是存储 ...
- jOOQ是如何设计事务API(详细指南)
从jOOQ 3.4开始,我们在jOOQ的JDBC之上有一个简化事务逻辑的API,从jOOQ 3.17和 #13502 开始,在R2DBC之上也将提供一个同等的API,用于反应式应用. 与所有的jOOQ ...
- ASR 语音识别(VOSK)API资源/DEMO
jiaying系列 网页版演示地址:ai.moneymeeting.club ASR 语音识别(VOSK)API资源/DEMO 注:VOSK将下线,改为NEMO,请移步:https://blog.cs ...
- java jta_分布式事务(二)Java事务API(JTA)规范
一.引子 既然出现了分布式场景(DTP模型), 大java也及时制定出一套规范来给各大应用服务器.数据库/mq等厂商使用,以方便管理互通--->JTA闪亮登场.JTA(Java Transact ...
- C# 开源一个基于 yarp 的 API 网关 Demo,支持绑定 Kubernetes Service
关于 Neting 刚开始的时候是打算使用微软官方的 Yarp 库,实现一个 API 网关.目前写完了查看 Kubernetes Service 信息.创建 Route 和 Cluster 和绑定 K ...
- 完整的Android 新浪微博api调用DEMO
第一次使用请在程序中的指定位置放入你的app key 如果不知道怎么获取appkey,请登录 http://open.weibo.com/development 不懂新浪微博api干嘛用,还是登录 h ...
最新文章
- 如何在Gihub上面精准搜索开源项目?
- 黄埔大学,选址定了!
- 编程方法学8:信息隐藏
- [原创] 在线音乐API的研究 (Part 2.1)
- mock 抛出一个异常如何终止_教你使用Mock完成单元测试
- 多模态语义分析_情感分析、多模态NLP、多语言翻译...这场NLP知识盛宴不可错过!...
- OpenGL:编译glfw并配置
- [Ext JS 4] 实战之Grid, Tree Gird 动态添加列
- php phonegap,PHP数据是无休止的加载,jquery,phonegap
- Node.js:package.json中的dependencies和devDependencies区别
- Xcode5使用遇到的问题
- 充电速度公式_锂电充电时间计算公式
- 作为成年人的基本道德之一,就是不…
- GPUImage滤镜
- 购买服务器及宝塔部署环境指南
- 微信小程序实现图片预览的功能
- matlab离群值算法_什么是离群值如何检测和删除它们对离群值敏感的算法
- px、rem、em的区别与联系
- “碎片化时代”的灵动工作与生活
- case zhen语句_case when zhen else (Sql 2005)