我试图用JDBC声明性事务和JDBC模板从源帐户到目标帐户进行资金转移。
@Autowired
JdbcTemplate jdbcTemp;
-----
-----
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
public void deposit(int accountNumber, double amount) {
String sql = "select Balance from <TableName> where Account_Number=?";
double balance = jdbcTemp.queryForObject(sql, Double.class, accountNumber);
balance = balance + amount;
String sql2 = "update <TableName> set Balance=? where Account_Number=?";
jdbcTemp.update(sql2, balance, accountNumber);
}
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
public void withdraw(int accountNumber, double amount) throws InSufficientFundsExceptions {
String sql = "select Balance from <TableName> where Account_Number=?";
double balance = jdbcTemp.queryForObject(sql, Double.class, accountNumber);
if (balance >= 5000) {
balance = balance - amount;
String sql2 = "update <TableName> set Balance=? where Account_Number=?";
jdbcTemp.update(sql2, balance, accountNumber);
} else {
throw new InSufficientFundsExceptions("InSufficientFunds Exception");
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)
public void fundsTransfer(int sourceAccountNumber, int destinationAccountNumber, double amount)
throws InSufficientFundsExceptions {
deposit(destinationAccountNumber, amount);
withdraw(sourceAccountNumber, amount);
}
有人能帮帮我吗,我错过了什么?理想情况下,目标帐户中反映的金额应该得到回滚,因为撤回以异常结束。
原因是因为Spring默认情况下只回滚未检查的异常。由于您的类是一个检查异常,因为它不扩展runtimeException,而是常规异常,所以它不执行回滚。
您可以使用@Transactional注释中的rollBackFor属性并指定InSuffientFundsException来修改此行为。
问题是,即使在为Exception.class声明回滚之后,事务仍然没有回滚。 1.我的数据源
请说出这段代码有什么问题。
声明式事务, 可以脱离Trans类实现单个方法或多个的事务模板. 例如设置Service类所有insert开头的方法,均应用READ_COMMITTED事务 声明式事务,是通过aop拦截器做的, 而aop依赖ioc, 在@IocBy注解中启用即可. @IocBy(type=ComboIocProvider.class, args={"*json","org/nutz/mvc/testap
主要内容:提交和回滚,使用保存点如果JDBC连接处于自动提交模式,默认情况下,则每个SQL语句在完成后都会提交到数据库。 对于简单的应用程序可能没有问题,但是有三个原因需要考虑是否关闭自动提交并管理自己的事务 - 提高性能 保持业务流程的完整性 使用分布式事务 事务能够控制何时更改提交并应用于数据库。 它将单个SQL语句或一组SQL语句视为一个逻辑单元,如果任何语句失败,整个事务将失败。 要启用手动事务支持,而不是使用JDBC驱
本文向大家介绍SpringBoot 注解事务声明式事务的方式,包括了SpringBoot 注解事务声明式事务的方式的使用技巧和注意事项,需要的朋友参考一下 springboot 对新人来说可能上手比springmvc要快,但是对于各位从springmvc转战到springboot的话,有些地方还需要适应下,尤其是xml配置。我个人是比较喜欢注解➕xml是因为看着方便,查找方便,清晰明了。但是xm
我有一个服务层类,它有annotation@Controller和我在线程中生成的服务调用,它正在更新数据库中的某些内容。我在thread的方法中使用了@transaction注释。但我遇到了hibernate异常“找不到会话”。我需要为线程添加任何注释吗? lient.runHibernateException:在lient.java:222没有找到当前线程的Session 4. SpringS
9.4 声明式事务 9.4.1 声明式事务概述 从上节编程式实现事务管理可以深刻体会到编程式事务的痛苦,即使通过代理配置方式也是不小的工作量。 本节将介绍声明式事务支持,使用该方式后最大的获益是简单,事务管理不再是令人痛苦的,而且此方式属于无侵入式,对业务逻辑实现无影响。 接下来先来看看声明式事务如何实现吧。 9.4.2 声明式实现事务管理 1、定义业务逻辑实现,此处使用ConfigUserSer
数 据库(或者系统)事务的声明总是必须的。在数据库事务之外,就无法和数据库通讯(这可能会让那些习惯于自动提交事务模式的开发人员感到迷惑)。永远使用清 晰的事务声明,即使只读操作也是如此。进行 显式的事务声明并不总是需要的,这取决于你的事务隔离级别和数据库的能力,但不管怎么说,声明事务总归有益无害。当然,一个单独的数据库事务总是比很多琐 碎的事务性能更好,即时对读数据而言也是一样。 一 个 Hibe