为什么在步骤中将 TransactionManager 设置为 JPATransactionManager 不正确?

2024-05-06

我正在使用 Spring Batch 和 JPA,并且经历了 TransactionManager bean 冲突。我通过在步骤中将 TransactionManager 设置为 JpaTransactionManager 找到了解决方案。但根据这个链接(https://github.com/spring-projects/spring-batch/issues/961 https://github.com/spring-projects/spring-batch/issues/961),尽管它对我有用,但它是不正确的。

@Autowired
private JpaTransactionManager transactionManager;

private Step buildTaskletStep() {
        return stepBuilderFactory.get("SendCampaignStep")
                    .<UserAccount, UserAccount>chunk(pushServiceConfiguration.getCampaignBatchSize())
                    .reader(userAccountItemReader)
                    .processor(userAccountItemProcessor)
                    .writer(userAccountItemWriter)
                    .transactionManager(transactionManager)
                    .build();
    }
}

我尝试了实现 BatchConfigurer 的建议解决方案,但它与我使用以下代码禁用元数据表相冲突:

@Configuration
@EnableAutoConfiguration
@EnableBatchProcessing
public class BatchConfiguration extends DefaultBatchConfigurer {

    @Override
    public void setDataSource(DataSource dataSource) {
        // override to do not set datasource even if a datasource exist.
        // initialize will use a Map based JobRepository (instead of database)
    }

}

使用在步骤中设置 TransactionManager 的第一个解决方案会出现什么问题?


在 Spring Batch 中,有两个地方使用事务管理器:

  • 在围绕创建的代理中JobRepository在与作业存储库交互时创建事务方法
  • 在每个步骤定义中驱动步骤的事务

通常,两个地方都使用相同的事务管理器,但这不是必需的。使用a是完全可以的ResourcelessTransactionManager作业存储库不存储任何元数据和JpaTransactionManager在将数据保存到数据库的步骤中。

默认情况下,当您使用@EnableBatchProcessing你提供一个DataSourcebean,Spring Batch 将创建一个DataSourceTransactionManager并在两个地方都设置,因为这是最典型的情况。但没有什么可以阻止您在该步骤中使用不同的事务管理器。在这种情况下,您应该接受这样的事实:当出现问题时,业务数据和技术元数据可能会不同步。

这就是为什么提供自定义事务管理器的预期方法是通过自定义BatchConfigurer#getTransactionManager,在这种情况下,您的自定义事务管理器会在这两个地方进行设置。这没有明确记录,但自 v4.1 以来已修复。这是提到的部分:配置作业存储库 https://docs.spring.io/spring-batch/docs/4.1.x/reference/html/job.html#javaConfig。 Javadoc中也提到了这一点@EnableBatchProcessing https://docs.spring.io/spring-batch/docs/4.3.x/api/org/springframework/batch/core/configuration/annotation/EnableBatchProcessing.html:

In order to use a custom transaction manager, a custom BatchConfigurer should be provided.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在步骤中将 TransactionManager 设置为 JPATransactionManager 不正确? 的相关文章

  • 使用 Java 编辑 jpeg EXIF 数据

    我想编辑 jpg 文件的属性 例如 评论 标题 拍摄日期 相机制造商等 我找到了读取这些数据的库 但我需要一个free带有示例的库edit them 我知道 apache 的成像 sanselan 但我无法用它编辑数据 如果您以前自己使用过
  • 如何重定向到WEB-INF文件夹中的JSP

    我有一个带有 NAV 的 jsp 其中还包含 UL 和以下元素 如下面的代码所示
  • JFrame 图标在 Ubuntu 12.04 中不显示

    我使用一些图像图标开发了一个 Swing 应用程序 应用程序 jar 文件在 Windows 中按预期工作 但相同的 jar 文件在 Ubuntu 12 04 操作系统上不显示框架的图像图标 我的示例代码 ImageIcon ImageIc
  • Java NIO Pipe 与 BlockingQueue

    我刚刚发现它只有一个 NIO 工具 即 Java NIO Pipe 它是为在线程之间传递数据而设计的 与通过队列 例如 ArrayBlockingQueue 传递的更传统的消息相比 使用此机制是否有任何优势 通常 将数据传递给另一个线程进行
  • 使用 REST API 实现属性/字段级安全

    我正在为支持多租户授权模型的 REST API 构建概念验证 该模型不仅控制用户可以访问哪些对象 还控制对象中的字段 此模型的目标是确保租户管理员只能修改其租户并且只能查看允许的对象属性 我有一个正在开发的现有代码库 可在以下位置公开获取
  • JaxB2Marshaller 未将 XML 绑定到 Kotlin 数据类

    我正在编写一个批处理作业来解析 XML 提取字段并将它们保存在数据库中 解析 XML 时 它会选取 2 个根元素 但将所有字段保留为空 因此在我的数据库中 我有 2 条记录将为空字段 似乎无法弄清楚为什么它无法读取元素 TIA Bean f
  • 如何设置Java线程的CPU核心亲和力?

    我搜索了以前关于类似主题的帖子 但找不到合适的答案 因此提出这个问题 非常感谢您帮助回答 我知道在 Linux 中通过任务集命令设置进程与特定 CPU 核心的关联性 但我想设置 Java 线程与特定 cpu 核心的亲和力 以便属于同一进程的
  • Java Swing 自定义形状(2D 图形)

    我需要绘制自定义形状 现在 当用户单击面板上的几个点时 我使用多边形创建一个形状 public void mouseClicked MouseEvent e polygon addPoint e getX e getY repaint 但我
  • 如何将多个值存储到一个键(java)

    我搜索一个可以存储多个键值对的数据结构 数据基本上是这样的 1 value 1 2 value 2 于是我想到了使用HashMap 遗憾的是 这对我不起作用 因为一个键可能会出现多个值 在上面的例子中 1 value 2 可能是另一个条目
  • 如何用Java捕获音频数据

    我想访问我的麦克风用 Java 录制的音频数据 我该怎么做呢 我的目标是保存录制的音频数据并同时向用户播放 如果您不需要 JMF 中的任何附加功能 我会避免使用它 因为开发已经停止 最后一个版本是 2004 年 它与 Java 6 存在兼容
  • Java检测音频文件(mp3)

    我有这段代码可以读取 mp3 文件 import java io File import java io IOException import javax sound sampled AudioSystem import javax sou
  • 使用 JNDI 添加 LDAP 条目

    我正在尝试使用 JNDI 将条目添加到 LDAP 服务器 我可以成功地从 LDAP 服务器读取条目 但是当我尝试添加新条目时出现错误 我检查了各种方法但都失败了 private String getUserAttribs String se
  • 使用 GSON 将 JSON 字符串转换为 Java 对象

    我正在尝试将 json 解析为 java 根据 jsonlint com 我有以下字符串 该字符串是有效的 json private final static String LOC JSON lat1 39 737567 lat2 32 7
  • 在 Tomcat 中触发内部 ServletRequest

    我正在使用 Quartz 来安排 Web 应用程序的后台任务 其中一些任务只是针对同一 Web 应用程序发出请求 我想避免依赖于任何类型的网络设置 例如 如果从数据中心内发出带有我自己域名的请求 则可能无法正确路由 是否有一个 Java A
  • 为什么对象可以改变类变量的值?

    由甲骨文提供定义 http docs oracle com javase tutorial java javaOO classvars html 有时 您希望拥有所有对象共有的变量 这是通过 static 修饰符来完成的 声明中带有 sta
  • 无法使用 Jsoup HTML 解析器 Java 实现某些功能

    我无法使用 Jsoup Java 库解析以下场景的一些文本 1 This is b My Text b some other b b text as well b b b non empty tag1 b other text 预期输出 s
  • 用 Java 编写“漂亮”代码的标准? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JavaFX颜色选择器的语言

    有没有办法改变语言ColorPicker的文本 例如 自定义颜色 当前颜色 新颜色 色相 饱和度 亮度 不透明度 保存 使用 取消 编辑 以下答案适合那些需要更多内容的人exotic语言 如果您使用其中之一 de es fr it ja k
  • Jersey:返回字符串列表

    我尝试以 JSON 和 XML 形式返回 Jersey 中的字符串列表 我以为这会是微不足道的 我的第一次尝试是写这样的东西 GET Produces MediaType APPLICATION JSON MediaType APPLICA
  • JVM锯齿状空闲进程

    我目前正在进行一项涉及 JVM 及其内存使用工作原理的研究 我不明白的是 JVM在空闲时用什么填充它的内存 只是为了在堆几乎达到时释放它 为什么使用的内存不只有一条平线 顺便说一句 这个 java 应用程序托管在 glassfish 上 但

随机推荐

  • 如何修复 STL 样式容器以容纳不完整或抽象类型?

    几天前 我尝试以与 STL 容器相同的风格编写一个基本的树实现 现在我尝试在我的代码中使用它 但是有两件事似乎不起作用 但可以说std vector 即 使用不完整类型和使用抽象类型 如何修复我的树实现以获得此功能 我尝试稍微压缩一下我的代
  • UnhandledException 事件不起作用?

    我正在编写一个小库 它捕获所有未处理的异常 显示一个小对话框 类似于 NF 的常见对话框 使用户有机会将异常发送给开发人员 为此 我使用 AppDomain 的 UnhandledException Event 如下所示 app Unhan
  • 在智能卡中选择DF(专用文件),返回错误6981

    我编写了一个与智能卡通信的程序 Gemalto 公司 MPCOS 小程序 我可以成功连接到卡并传输命令并获取数据 但是我有一个问题 当我使用00 A4 01 00 02 02 00命令选择 DF 专用文件 它返回了错误69 81 文件指示符
  • 我可以以低权限运行 Node.JS 吗?

    我想以低权限用户运行节点 可以吗 我需要使用 Express js 框架 是的 有许多解决方案可用于执行此操作 具体取决于您的具体需求 如果你想在端口 80 上运行节点 你可以使用 nginx 尚不能与 WebSockets 配合使用 或h
  • 通过 SQL 中的查询显示组中的非聚合列

    我在 SQL 2008 中有一个表 ID Items 1 A 1 B 2 C 3 D 3 B 我想得到的结果是 ID Items 1 A B 2 C 3 B D 我使用了游标 但它大大减慢了过程 我可以使用按查询分组或通过任何其他方式实现上
  • 在 Google Analytics 中准确报告通过 PayPal 进行的付款的推荐人

    在我们的 Google Analytics 电子商务中 PayPal 被视为推荐人 我发现许多文章概述了 utmnooveride 的使用 以确保 PayPal 交易传递数据 以便原始推荐人获得信用 我们使用 PayPal 处理我们的信用卡
  • 使用 GNU make “从源代码树中”构建 C 程序

    我想使用 GNU make 工具为我的微控制器构建一个 C 项目 我想以一种干净的方式来做这件事 这样我的源代码在构建后就不会被目标文件和其他东西弄乱 想象一下我有一个名为 myProject 的项目文件夹 其中有两个文件夹 myProje
  • 如何缓存和刷新托管身份令牌

    我正在使用 azure 托管身份 下面的代码生成所需的令牌来验证 api 我在用
  • 简单的php ajax请求url

    我有很多这样的链接 不同的项目有不同的链接 a class member href http ex com action php me 1 link1 a 所以当我点击这个我想导航到action php从这里 here php 我正在使用
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • 对seaborn图中的分类x轴进行排序

    我正在尝试使用 seaborn 散点图绘制数据框中前 30 的值 如下所示 同一图的可重现代码 import seaborn as sns df sns load dataset iris function to return top 30
  • 使用视觉格式 NSLayoutConstraints 居中视图

    我正在尝试使用视觉格式语言将视图居中 self view addConstraints NSLayoutConstraint constraintsWithVisualFormat H progressView 300 options NS
  • HTTP-DELETE-请求是否允许响应主体?

    我假设响应代码 200 始终允许响应主体 但我找不到任何明确提及删除请求的响应主体 这里明确提到了RFC http www w3 org Protocols rfc2616 rfc2616 sec9 html sec9 7 简短的回答是 Y
  • 将 jasper 导出为 pdf 时出现 NoClassDefFoundError: com/itextpdf/text/DocumentException

    我创建了一个jasper报告 现在我需要将该报告导出到pdf格式 这是我的代码 compiles jrxml JasperCompileManager compileReportToFile reportName jrxml fills c
  • 加载一张随机 flickr 图像并附加到 div

    我基本上试图加载从特定用户和特定集合中获取的随机 flickr 图像 然后将其显示在 ID 为 flickr wrap 的 div 中 我正在尝试操纵此 JSON 代码来执行我想要的操作 但不知道从哪里开始 这段代码当前加载了很多图像 我只
  • 如何在 PHP 中验证小数

    如何在 PHP 中验证十进制数字 我查看了 is numeric 但这对我不起作用 bool is numeric 混合变量 查找给定变量是否为 数字 数字字符串包括 可选符号 任意数量的数字 可选的小数部分和可选的 指数部分 因此 012
  • BitmapFactory.decodeResource 返回空值

    我试图从视图对象中的内部资源加载位图 源本身位于 可绘制 文件中 代码是 import android content Context import android graphics Bitmap import android graphi
  • 如何根据当前请求更改 django 设置?

    我从一个 django 实例运行多个站点 并期望该框架最终能够通过一个或多个安装为数百个站点提供服务 我需要根据当前请求修补一些 django 设置 我已经编写了一些中间件来对设置进行猴子修补 但我需要在调用中间件之前修补这些设置 因为其他
  • 为什么结构体不能转换为嵌入类型

    package main type Inner struct x int type Outer struct Inner func main x Inner 1 y Outer x cannot convert x type Inner t
  • 为什么在步骤中将 TransactionManager 设置为 JPATransactionManager 不正确?

    我正在使用 Spring Batch 和 JPA 并且经历了 TransactionManager bean 冲突 我通过在步骤中将 TransactionManager 设置为 JpaTransactionManager 找到了解决方案