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

Spring Batch多数据源和ChainedTransactionManager风险

岳玉书
2023-03-14

我正在研究由两个数据源组成的Spring批处理的可行性。用于Spring批处理元数据的SQL数据源和用于业务数据的MongoDB数据源(具有事务用途)。事务方面在这里提出了几个问题。

以下主题:带有MongoDB的Spring批处理以及事务和相关资源为我的问题提供了许多答案。答案提到了使用Spring的JtaTransactionManager来管理两个数据源上的分布式事务。这种技术使用2PC协议。如果我理解正确,它也是最健壮的解决方案。https://www.infoworld.com/article/2077963/distributed-transactions-in-spring--with-and-without-xa.html?page=2

另一方面,我找到了一些关于Spring的ChainedTransactionManager的资源。这项技术使用了尽最大努力的1PC协议。如果我正确理解,在基础设施出现问题(例如网络故障)的情况下,系统可能处于不一致的状态,那么这种解决方案就不那么健壮。ChainedTransactionManager的优点是易于实现,并提供更好的性能。我看到它被弃用了https://github.com/spring-projects/spring-data-commons/issues/2232.

在Spring批次中使用ChainedTransactionManager的具体风险是什么?如果出现错误,Spring批处理元数据和Mongo中的业务数据之间是否存在不一致?我想在重试或区块跳过策略中也需要考虑一些因素?

非常感谢你的帮助。

共有1个答案

颛孙国源
2023-03-14

如果出现错误,Spring批处理元数据和Mongo中的业务数据之间是否存在不一致?

是的,这是你应该意识到的风险。

避免这种情况的一种常见技术是禁用状态管理并使用流程指示器模式。你可以在这里找到一个例子。

 类似资料:
  • 我正在尝试使用两个数据源与我的SpringBoot应用程序,但无法获得第二个数据源自动连接。我尝试过很多事情,但这是我最接近的一次: 我的Yaml文件: 这是我到目前为止最接近的一次。我之所以说它是最接近的,是因为如果我删除@qualifier,那么我的两个dao方法实际上都可以工作,假设SECOND_SELECT语句对于我的DB1是有效的SQL语句。当我为非主datasouce输入@Qualif

  • 由于这个问题经常被问到,nutzcn社区累计了好几十个帖子,所以有必要单独开个文档描述一下 在一些复杂或遗留系统中,通常需要操作两个或更多的数据源. 总的原则: NutDao与DataSource是一对一关系. 值得注意的是, javax.sql.DataSource只是一个接口,而且NutDao只会调用其getConnection()方法. 配对模式在Ioc中的示例 你可以定义无数个dataSo

  • 我有一个springbatch应用程序,我将连接到一个网络数据库进行阅读。我发现的大多数示例都嵌入了数据库,用于独立测试。我不想那样做。我不确定配置是否类似。以下是我所拥有的最具德国特色的部分(带有一些异议): ,然后从应用程序启动: 我没有配置数据源。我不确定,因为我的基本上只是一个到远程网络数据库的客户端连接,它的配置是否会与我找到的各种示例的嵌入式设置不同。所以我自然会出错(如下)。我只是在

  • 我试图使用两个数据源,一个用于Spring批处理的元数据表,另一个是我的应用程序数据库,用于读取/处理/写入。

  • 我有两个配置文件(“autoContido”和“weblogic”),其中每个配置文件都有两个配置类,因为我使用的是两个数据源。 我已经将特定数据源中的bean注释为@Primary,而另一个数据源配置类中的bean不是@Primary,但我对它们的命名不同。 我以为使用@主注释就不会有像下面这样的错误,但我仍然得到它们。有人能帮我看看问题出在哪里吗? 我尝试使用@Primary annotati

  • 我无法连接到两个数据源使用在JDNI与Spring Boot。 生成以下stacktrace: 我做错了什么?