业务开发中我们常常使用申明是事务,那么申明式事务到底是如何运作的呢,这就像一个黑盒,我们可以参考编程式事务的方式来了解其具体实现。

只有一个事务操作

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相关推荐

  1. kafka系列九、kafka事务原理、事务API和使用场景

    一.事务场景 最简单的需求是producer发的多条消息组成一个事务这些消息需要对consumer同时可见或者同时不可见 . producer可能会给多个topic,多个partition发消息,这些 ...

  2. [JTA] Java事务api

    JTA和JTS Java事务API(JTA:Java Transaction API)和它的同胞Java事务服务(JTS:Java Transaction Service),为J2EE平台提供了分布式 ...

  3. ArangoDB 3.5发布:流事务API、蒙面数据、搜索性能大幅提升、最短路径功能

    ArangoDB 3.5 发布了.ArangoDB 是一个分布式原生的多模型数据库,具有灵活的文档.图形和键值数据模型.使用方便的 SQL 查询语言或 JavaScript 扩展构建高性能应用程序. ...

  4. 【转载】Elasticsearch客户端API使用Demo

    Elasticsearch客户端API使用Demo, 转载自官方文档, 以索引雇员文档为示例, 在命令行使用curl演示了一系列的Restful API操作. 1.索引雇员文档 第一个业务需求就是存储 ...

  5. jOOQ是如何设计事务API(详细指南)

    从jOOQ 3.4开始,我们在jOOQ的JDBC之上有一个简化事务逻辑的API,从jOOQ 3.17和 #13502 开始,在R2DBC之上也将提供一个同等的API,用于反应式应用. 与所有的jOOQ ...

  6. ASR 语音识别(VOSK)API资源/DEMO

    jiaying系列 网页版演示地址:ai.moneymeeting.club ASR 语音识别(VOSK)API资源/DEMO 注:VOSK将下线,改为NEMO,请移步:https://blog.cs ...

  7. java jta_分布式事务(二)Java事务API(JTA)规范

    一.引子 既然出现了分布式场景(DTP模型), 大java也及时制定出一套规范来给各大应用服务器.数据库/mq等厂商使用,以方便管理互通--->JTA闪亮登场.JTA(Java Transact ...

  8. C# 开源一个基于 yarp 的 API 网关 Demo,支持绑定 Kubernetes Service

    关于 Neting 刚开始的时候是打算使用微软官方的 Yarp 库,实现一个 API 网关.目前写完了查看 Kubernetes Service 信息.创建 Route 和 Cluster 和绑定 K ...

  9. 完整的Android 新浪微博api调用DEMO

    第一次使用请在程序中的指定位置放入你的app key 如果不知道怎么获取appkey,请登录 http://open.weibo.com/development 不懂新浪微博api干嘛用,还是登录 h ...

最新文章

  1. 如何在Gihub上面精准搜索开源项目?
  2. 黄埔大学,选址定了!
  3. 编程方法学8:信息隐藏
  4. [原创] 在线音乐API的研究 (Part 2.1)
  5. mock 抛出一个异常如何终止_教你使用Mock完成单元测试
  6. 多模态语义分析_情感分析、多模态NLP、多语言翻译...这场NLP知识盛宴不可错过!...
  7. OpenGL:编译glfw并配置
  8. [Ext JS 4] 实战之Grid, Tree Gird 动态添加列
  9. php phonegap,PHP数据是无休止的加载,jquery,phonegap
  10. Node.js:package.json中的dependencies和devDependencies区别
  11. Xcode5使用遇到的问题
  12. 充电速度公式_锂电充电时间计算公式
  13. 作为成年人的基本道德之一,就是不…
  14. GPUImage滤镜
  15. 购买服务器及宝塔部署环境指南
  16. 微信小程序实现图片预览的功能
  17. matlab离群值算法_什么是离群值如何检测和删除它们对离群值敏感的算法
  18. px、rem、em的区别与联系
  19. “碎片化时代”的灵动工作与生活
  20. case zhen语句_case when zhen else (Sql 2005)

热门文章

  1. div+mui+vue.js 制作问卷调查单页 ——题目答案是造的json
  2. android添加google日历活动
  3. 人脸变形之移动最小二乘MLS
  4. 从零开始学区块链之dapp开发(2)测试环境搭建
  5. 移远EC20 4G模块的GPS部件刷新率修改方法,附GPS数据格式说明
  6. 测试工程师必备linux基础一(服务器磁盘篇)
  7. 可转债纯债溢价率转股溢价率计算方式
  8. js split函数
  9. 毕业后签的就业协议服务器有效吗,毕业生电子就业协议书签约指南
  10. C++魔兽世界大作业其三——————战斗场地架构