【问题标题】:Spring batch jpa and schema questionsSpring批处理jpa和模式问题
【发布时间】:2018-10-30 11:14:46
【问题描述】:
  1. 在文档中它说“JPA 没有类似于 Hibernate StatelessSession 的概念,因此我们必须使用 JPA 规范提供的其他功能。” - 这是什么意思? Hibernate 是 jpa impl 之一,所以在这里有点困惑

    1. 例如,我们在哪里使用我们拥有的 jpa infra(实体/crud repo),我们希望使用它来读取数据和写入数据。大多数例子都是关于文件读写的,还有一些关于 jdbc 游标阅读器的例子。但是由于我们使用的是休眠的其他功能,例如 envers,我们希望使用与在线交易相同的 jpa 方式。我们正在使用开箱即用的 spring boot/jpa (hibernate) 与 oracle 和内存 h2 db for dev。

    2. 在我们使用 oracle 的产品中,我们有访问某些模式的用户,我们如何通知 Spring Batch 使用特定模式来创建表。现在一段时间内,相同的应用程序将用于批处理和在线,因此如果可能的话,我们不想使用第二个数据源和不同的用户进行批处理。这不是对所有人都非常基本的要求吗?

Spring Batch 的良好文档,也喜欢 java/xml 配置切换。

我们使用带有批处理的springboot 2.x。

【问题讨论】:

  • 你了解 Spring Batch 的基础知识吗?您可以在 ItemReader 或 ItemWriter 中注入 EntityManger。您能否尝试更准确地询问您需要知道的内容。谢谢。

标签: spring-batch


【解决方案1】:
  1. 在文档中它说“JPA 没有类似于 Hibernate StatelessSession 的概念,因此我们必须使用 JPA 规范提供的其他功能。” - 这是什么意思?

JPA 中 Hibernate Session API 的直接等价物是 EntityManager。所以这仅仅意味着在 JPA 中没有像 StatelessEntityManager 这样的 API,我们需要找到一种方法来仅使用 JPA API 来实现相同的功能,这在同一部分中进行了解释:After each page is read, the entities become detached and the persistence context is cleared, to allow the entities to be garbage collected once the page is processed.

  1. 我们希望使用与在线交易相同的 jpa 方式。

您可以为 Web 应用和批处理应用使用相同的 DAO 或存储库。例如,ItemWriterAdapter 允许您将 hibernate/JPA DAO/repository 调整为项目编写器接口并使用它来持久化实体。

  1. 在产品中,我们使用 oracle,我们有访问某些模式的用户,我们如何通知 Spring Batch 使用特定模式来创建表。现在一段时间内,相同的应用程序将用于批处理和在线,所以如果可能的话,我们不想使用第二个数据源和不同的用户进行批处理。这不是对所有人都非常基本的要求吗?

您可以为 Web 应用程序和批处理应用程序使用相同的数据源。然后由您来选择 Spring Batch 表的模式。我建议使用相同的架构,以便数据和元数据始终保持同步(例如,当 Spring Batch 事务失败时)。

希望这会有所帮助。

【讨论】:

  • 谢谢。在 answer#3 上,我试图找到一种方法来通知 Spring Batch 使用特定的模式,但找不到方法。它只是在默认模式中创建。
  • 你说你使用spring boot,所以你可以在spring.datasource.url属性中指定schema。官方文档中有一个例子:docs.spring.io/spring-boot/docs/current/reference/html/….
  • 是的。让我再次解释一下,在我们的应用程序中,我们有用于从多个 oracle 表中读取数据的数据源驻留在多个 oracle 模式中。我们的实体使用模式属性进行注释,因此我们可以告诉它在该模式中创建表。但是对于弹簧批处理,我们如何要求它在 schemx 中创建弹簧批处理表,因为我们无法控制。或者假设我可以在 schemax 中预先创建 Spring Batch 表,然后我们如何通知 Spring Batch 使用这些表。
  • Spring Batch 不知道模式,它配置了数据源。您可以使用所需的模式配置该数据源。例如,如果您使用spring.datasource.url=jdbc:mysql://localhost/test 配置数据源并告诉spring batch 使用该数据源,它将使用test 模式中的表。当然,您需要在该架构中预先手动创建这些表,或者使用 spring.batch.initialize-schema 属性指示 spring boot 为您完成。
猜你喜欢
  • 2018-10-14
  • 2010-12-17
  • 1970-01-01
  • 2019-02-14
  • 2022-12-05
  • 1970-01-01
  • 2021-08-31
  • 2020-06-18
  • 1970-01-01
相关资源
最近更新 更多