问题标签 [spring-transactions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
9461 浏览

spring - 在基于 Spring 注释的事务中设置隔离级别

我在我的项目中使用基于注释的事务管理(我用@Transactional 注释了一些方法)。我想全局设置隔离级别(而不是将其作为每个 @Transactional 注释的参数)。

是否可以在 XML 中进行配置?目前我的 xml 配置包含

是否可以以某种方式将隔离添加到 tx:annotation-driven?

0 投票
1 回答
3148 浏览

java - spring数据源事务管理器不回滚

你好,

我正在尝试测试 spring 的事务管理功能,但我无法让它工作。我一直试图解决它几个小时,但没有运气。

上面你可以看到相关的 config xml 定义和 dao 测试类。即使我使用调试级别进行日志记录,也没有回滚机制的足迹。

任何帮助将不胜感激

0 投票
2 回答
8157 浏览

java - 关闭文件方法抛出 IOException 时如何管理事务(包括文件 IO)

我最近开始使用 Spring 的数据源事务管理器。我现在有个问题。我的事务包括对数据库表的更新和对文件的写入操作。

它工作正常,但我对文件 I/O 有一些疑问。正如您在下面看到的,我已将我的 bean 的 openFile 和 closeFile 方法分别配置为 init-method 和 destroy-method,这反过来又提供了像构造函数和析构函数一样调用这些方法。如果文件没有正确关闭,一些记录可能没有成功写入 output.txt 文件,这意味着我也无法正确处理事务管理。

但是,我想回滚那些尚未附加到平面文件的数据库更新。使用我的解决方案,似乎不可能将 fileClose 方法添加到事务中。有谁知道如何正确实施这个期望的行动?

任何建议将不胜感激

0 投票
3 回答
3717 浏览

transactions - Spring Batch面向chunk的处理策略回滚机制

众所周知,spring batch从2.0版本开始就使用了面向chunk的处理。

这是否意味着,如果项目编写器中发生异常,数据源事务管理器将回滚整个块或仅回滚相关项目?

实际上,我试了一下,发现框架回滚了整个块。这不是我需要的,因为我不希望,比方说,当最后一个项目导致抛出异常时,已成功处理的 499 个项目在包含 500 个项目的块中回滚。

我能找到的唯一解决方案是将下面的属性添加到我的 tasklet 中。但是,我不确定这是否是正确的做法。

另一种意见是简单地将块大小减小到 1(一个),但那个也没有多大意义。

也许 Spring Batch 不适合我的问题域。如果是这样,请告诉我,这样我就不会再为那些特定于框架的行为而苦苦挣扎了。

任何建议将不胜感激。

0 投票
2 回答
3241 浏览

hibernate - Hibernate 和 Spring - 加载操作完成任务,更新/删除操作不完成

我一直在关注本教程: http ://www.scribd.com/doc/25244173/Java-Struts-Spring-Hibernate-Tutorial 设置(前面描述的)在教程文件中运行良好,但是当我做了更改 - 删除/更新操作不会发生。没有错误或怪癖,它完全忽略了我!至于检索数据-一切正常..

几乎所有来自 tut 的文件都是相同的,但有这些差异;本教程使用服务文件:

服务.java

我试图通过使用父控制器和对 HibernateUtil 的静态调用来分离文件: HibernateUtil.java

BaseController.java

事件控制器.java

和spring的applicationContext.xml

0 投票
5 回答
3821 浏览

java - 事务类Java编程

我想在java中实现类似事务的功能。我想做' n '操作,比如更新数据库的操作,插入队列的操作,更新另一种数据结构的操作等,所有这些操作都应该表现为一个事务,即,如果它成功,所有的操作应该成功完成,否则,如果一个失败,一切都应该失败。蛮力方法之一是编写 try-catch 块并恢复 catch 块中的所有操作。解决此类问题的任何指示?是否有任何模式或库可以实现这一目标?

0 投票
1 回答
4427 浏览

java - Spring Jdbc 声明式事务已创建但未执行任何操作

我尝试在基于 Spring 的 Web 应用程序中配置声明式事务管理,但它拒绝与我合作。

我有两个主要问题:

  1. 在我们的数据源(我们的应用程序需要它)上将 defaultAutoCommit 设置为 false 会导致所有查询回滚,无论是否涉及事务。
  2. 配置了事务并创建了代理类和事务方法,但是似乎没有使用任何事务。

第一个问题相当令人困惑,因为每个单独的查询都在数据库中回滚。这也包括 SELECT 语句。什么可能导致每个查询在数据库中回滚?

至于第二个问题,我对事务管理的配置概述如下:

应用程序上下文.xml

从我尝试解决此问题时访问的所有教程和论坛中,我相信我的配置应该是正确的。但是我并不完全理解 aop 和 spring 事务,所以我可能会遗漏一些重要的东西。

如上所述,我可以跟踪我的日志并查看为我的服务类创建的代理以及事务方法。但是,当我实际运行应用程序并跟踪日志时,我看不到任何处理 DataSourceTransactionManager 或正在创建、提交、回滚等事务的语句。

在我看来,实际上并没有运行任何东西,而且我非常困惑,因为我遵循了许多不同的教程并尝试了许多不同的方法,但它总是以这种情况结束。

我也相当确定我的 log4j 属性设置正确以接收来自 DataSourceTransactionManager 的消息,但我在下面提供它们以确保它不仅仅是我的日志记录错误。

我的 log4j 设置了以下记录器以尝试跟踪事务:

注意:我有一次在 DEBUG 上运行了顶级记录器,这就是我验证服务代理正在创建的地方。

有没有人对可能发生的事情有任何见解?我现在相当卡住,因为我确实看到了一些与创建交易有关的部分,但我没有看到任何使用任何交易的迹象。

编辑

JB Nizet 要求的附加信息。

我的整个应用程序是注解驱动的,所以我的服务 bean 使用 @Service 进行注解,并通过基于名称的自动装配注入到我的控制器中。

下面是我的服务类之一的示例(名称已更改,但将反映我的 applicationContext.xml)。

如您所见,我的服务类只是控制器类和 dao 类之间的代理。DAO 是我实际处理数据库连接的地方。

我相信我在某处读到,使服务事务化,而不是 dao 类,是处理事务时的首选做法。如果我错了,请纠正我。

ZapDAO 类概述如下。

我使用 jdbcTemplate 来处理我的连接和查询。

0 投票
6 回答
14972 浏览

java - 防止 Dozer 触发 Hibernate 延迟加载

我正在使用 Spring 事务,因此当 POJO 到 DTO 转换发生时,事务仍然处于活动状态。

我想防止 Dozer 触发延迟加载,以便永远不会发生隐藏的 sql 查询:所有获取都必须通过 HQL 显式完成(以获得对性能的最佳控制)。

  1. 这是一个好的做法(我在任何地方都找不到它的文档)?

  2. 如何安全地做到这一点?

我在 DTO 转换之前试过这个:

我不知道事务会发生什么,但是 Hibernate 会话没有关闭,延迟加载仍然发生。

我试过这个:

它可以防止延迟加载,但是直接在应用程序层(在我的项目中称为“外观”)中操作会话是一种好习惯吗?我应该害怕哪些负面影响?(我已经看到涉及 POJO -> DTO 转换的测试不能再通过 AbstractTransactionnalDatasource Spring 测试类启动,因为这些类试图触发不再链接到活动会话的事务的回滚)。

我还尝试将传播设置为 NOT_SUPPORTED 或 REQUIRES_NEW,但它会重用当前的 Hibernate 会话,并且不会阻止延迟加载。

0 投票
2 回答
6055 浏览

spring - 需要 Spring 3 中的示例事务处理

我需要分步指南来处理 spring sqltemplate 中的事务。事务处理必须在我的项目中实现。引导我。需要将事务管理与 SqlTemplate 一起使用。

0 投票
1 回答
1149 浏览

spring-transactions - 在 Spring + JPA + Hibernate 中使用 Spring 3.0 中的事务

我目前在一个项目中使用 Spring + JPA + hibernate。然后我在模型 dan DAO 实现中决定我的设计模式。我的所有交易目的类都有一个摘要。每个执行单个更新/创建/删除任务的类(作为服务)都必须继承自这个抽象类。

然后我有另一个类(上面类的子类)

BusinessTransaction 是一个具有一个方法的接口

请注意,我将@Transactional(使用默认 Propagation.REQUIRED)放在 SomeTransaction 类中,希望确保该类在事务中。

在 IntegrationTest 中使用时

结果是没有交易发生。并且仅执行将数据插入数据库任务的 someTransaction.execute 运行不佳。

然后我将 @Transactional 注释从 SomeTransaction 移动到 GlobalAbstractTransaction,这样代码就会像这样。

修改后的 GlobalAbstractTransaction

修改了 SomeTransaction

然后,测试工作,将数据插入数据库。

  1. 任何人都可以解释为什么会这样。我无法在 SomeTransaction.execute 中添加 @Transactional,因为它已经在 GlobalAbstractTransaction 中定义。我可以添加@Transactional 添加类级别吗?
  2. SomeTransaction 被计划为服务,在服务中我使用自动装配自动装配了 DAO 实现(我没有在 DAO 级别放置任何 @Transactional),这是大多数人推荐的。我只是将DAO 实现注释为@Repository,将服务类注释为@Service。(注意,在我的服务中只执行一项任务,InsertingService、UpdatingService、DeletingService 将分为三个类)。我计划为 Service Facade 添加另一层([http://java.dzone.com/articles/jpa-implementation-patterns-3][1]),请参阅链接以供参考。所以我创建了一个类

    公共类 ServiceFacadeBean { public void executeTransaction(String name){

    } }

我打算在这样的应用程序中使用。

在执行的执行中,我想使用反射使用“com.mycompany.SomeTransaction”来创建实例。但我总是得到NullPointerException

而且我打算使用 1 个服务类,只执行 1 个事务任务,例如插入数据库。放置@Transactional的最佳实践是什么,或者任何人都有很好的链接,可以很好地解释使用Spring事务的事务问题

任何人都有这方面的经验,或者有更好的设计模式解决方案吗?谢谢