当前位置: 首页 > 知识库问答 >
问题:

Spring未提交事务

皇甫心思
2023-03-14

我在我的项目中做过类似的事情。我手动回滚事务,为此我插入了try-catch块并手动回滚catch块中的事务。现在我从method1调用method2,并将对象保存到method2()中的数据库中,但它不会将对象保存到数据库中。

@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor=Throwable.class)
@Scheduled(cron = "0 5 16 * * ?")
public void method1() {

try{
---try block---
}
catch(Throwable t){
TransactionAspectSupport.currentTransactionStatus()
                .setRollbackOnly();
method2();
}
}

@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public void method2() {
---saving object to database----
someService.update(object);
}

我只是想知道什么是可能的解决方案,保存对象在方法2()在方法1()的faliure。

提前感谢。

共有1个答案

钱和平
2023-03-14

我相信一旦事务被回滚(就像您在调用方法2()之前所做的那样),事务就完成了(就像在kaput中一样),您不能继续使用它并期望提交。这需要是一个新事务(例如编程上):

// transactionManager is your platorm transaction manager usually injected
TransactionTemplate transactionTempate = new TransactionTemplate(transactionManager);

transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus arg0) {
                method2();
            }
        });
 类似资料:
  • 一些背景知识,我在我的web应用程序中使用JPA/Hibernate/Spring,我也使用org。springframework。orm。jpa。支持OpenEntityManagerViewFilter和用于处理实体的扩展持久性上下文。 问题: > 使用find方法从数据库加载实体,实体存储在会话中 用户更改实体并点击保存 用户更改反映在会话中存储的实体上(在控制器中) 实体被发送到服务类中的

  • 我有以下方法调用层次结构 在上面的场景中,我的期望是Spring应该在线程从Method od1出来时提交事务,或者如果在层次结构中的任何位置发生异常,则回滚。 但是Spring在方法2中执行更新后立即提交事务。我不明白为什么? 更新:-即使我将事务更改为事务(传播=传播。需要\u NEW),它仍会提交事务。所以没有影响

  • 我正在尝试捕获提交按钮click事件,并将页面滚动到顶部,如果它还没有在那里。 由于某些原因,该事件不会第一次触发,即如果滚动大于0,则不会发生滑到页面顶部的情况。只有第二次才会激活。 有什么想法或建议吗?我是不是漏掉了什么?谢谢.

  • 您能否帮助解决Resin+Oracle上XA事务的问题: 我们有WebApp,它必须执行涉及Oracle11.2.0.1和EHCache2.7的业务事务。(实际上可能有各种组合--两个不同的Oracle数据源(不同的模式),带有/不带有Ehcache,等等)。这就是从普通JDBC使用切换到JTA事务划分的原因。 > 在外部事务中使用Ehcache访问,在内部事务中只使用DB访问,即使在内部事务中使

  • 问题内容: 我有一个问题。我有多个表单元素(带有的表单),我还使用AJAX 添加了另一个表单元素。因此,我希望它处理类似的Submit事件: 但是添加了AJAX的表单无法使用。 问题出在哪里?是虫子吗? 问题答案: 您需要将事件委托给文档级别 的工作原理与您使用时相同,但也适用于以后添加的DOM。