问题标签 [spring-batch]
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.
database - 从处理大项目列表的程序中查询数据库的有效方法
我有一个带有 itemReader、itemProcessor 和 itemWriter 的 spring 批处理程序。
假设我有 10,000 条记录要处理。对于每个项目,我想从几个数据库表中获取数据,以确定一些条件并添加一些数据。
我相信这将在处理过程中完成。
问题:最好的设计是什么?对于在 itemProcessor 中注入 SimpleJdbcTemplate 的每个项目运行多个 Select 查询,我有点怀疑。有没有其他有效的方法来做到这一点?
提前致谢!!尼克
java - 具有固定顺序的 Spring Batch 多线程作业
我创建了一个 spring 批处理作业,它读取平面 CSV 文件的块(提交级别 = 10)并将输出写入另一个平面文件。干净利落。为了测试本地扩展,我还为 tasklet 配置了一个具有 10 个线程池的 TaskExecutor,从而通过使用多线程步进模式引入了并行性。正如预期的那样,这些线程同时读取项目,直到它们的块被填充并将块写入输出文件。同样正如预期的那样,由于这种并发阅读,项目的顺序发生了变化。但是是否有可能保持固定的顺序,最好仍然利用通过使用多个线程获得的更高性能?
java - 在春季批处理中在 ItemProcessors 之间传递数据的最佳方法?
我需要在项目处理器之间传递与处理项目相关的数据,我不需要保留数据,最好的方法是什么(注意我目前正在使用 StepSynchronizationManager 来访问 stepExecution 并将数据存储在 ExecutionContext 中)。
partitioning - 用于输入文件的 Spring Batch 自定义分区器
我正在尝试对包含;
分隔项的平面输入文件进行分区。一行中的第一项表示一个类别,我想对该类别进行分区,以便为每个类别创建一个分区,该分区将由专用线程处理。但我对如何在自定义中实现这种分区逻辑感到困惑Partitioner
。分区似乎发生在面向块的步骤之前,因此在读取,写入之前,所以看起来我需要逐行读取自定义分区程序中的文件,从行中获取类别字段并收集具有相同类别的行并创建ExecutionContext
对于这些集合中的每一个?
我在寻找正确的方向吗?有经验的人可以提供一个使用文件(可能是伪代码)的小例子吗?
spring-batch - 在 Spring 批处理作业中开发示例 helloWorld 应用程序?
我曾在 Spring 批处理中尝试过一些示例应用程序。但由于是 Spring 框架的新手,我并不清楚它是如何工作的。任何人都可以通过示例应用程序帮助我了解这个 Spring 批处理的基础知识。我认为在 Spring 批处理文档中我们也无法清楚地了解开发应用程序.. 帮助 plz。
java - 在不使用 maven 的情况下运行简单的 Spring 批处理作业?
我是 Spring 批处理框架的新手。我们可以创建一个批处理作业并在不使用 maven 的情况下运行它吗?我已经看到将 Spring Batch 与 Maven 连接起来的 Spring Batch 示例。任何人都可以给我一个示例 Spring Batch 项目,它可以在不使用 Maven 依赖项的情况下运行吗?或者至少给出一个想法。
multithreading - Spring Batch - 如何在多个线程中读取一个大文件?
问题:读取大小 > 10 MB 的文件并使用 Spring Batch 将其加载到临时表中。我们如何在读取文件时保持状态,以便在作业失败时重新启动作业?
根据文档,FileItemReader 不是线程安全的,如果我们尝试使其成为线程安全的,我们最终会失去可重新启动性。所以基本问题是:
- 有没有办法以块的形式读取文件并且每个线程都知道它需要读取哪个块?
- 如果我们使读取同步,在这种情况下需要进行哪些更改才能使作业可重新启动?
如果有人遇到过类似的问题或对其表现有任何分析,将有助于我们做出决定。
此外,任何指针或示例代码都会受到赞赏。
sql - DB2:在复杂的批处理查询中使用 NOT EXISTS 和 SYSIBM.DUAL
我在java对象中有数据作为data1,data2。
data1 和 data2 一起在我要插入对象的 myTable 中形成一个复合键。
写作是批量进行的。10 个插入语句是使用 10 个对象准备的,并作为批处理执行。
我想插入带有约束的上述数据: data1 + data2 不应该已经存在于 myTable 中,即 data1 + data2 应该是唯一的 --- 如果是唯一的,则写入 else 只是忽略。
我正在使用的查询是:
为单组数据独立运行上述查询成功运行。
但是,在批处理场景中运行时,我收到“com.ibm.db2.jcc.b.ie:非原子批处理失败”。错误。
我认为这与在批处理场景中使用 SYSIBM.DUAL 有关。
失败的代码:
插入查询:
语句设置器:
其中 item 是包含要写入的两列的 java 对象。
错误是:
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; 错误的 SQL 语法 [插入 mySchema.myTable(column1, column2) select ?,? 从不存在的 SYSIBM.DUAL 中(从 mySchema.myTable A 中选择 1,其中 ?=A.column1 和 ?=A.column2)];嵌套异常是 com.ibm.db2.jcc.b.ie:非原子批处理失败。该批次已提交,但该批次的单个成员至少发生了一次异常。使用 getNextException() 检索特定批处理元素的异常。
spring-batch - 我们在 Spring Batch 中是否有类似于 StepExecutionContext 的 ChunkExecutionContext?
我们希望在写入每个块后做一些事情,并在仅对块有效的上下文中设置一些数据。ChunkListener
然后在的afterChunk方法中使用此数据。
我们可以用它StepExecutionContext
来实现这一点,但似乎并不完全正确。
有没有人有更多关于在哪里存储仅对块有效的上下文信息的信息?
java - 如何在春季批处理中使用 FlatFileItemWriter 写入标准输出?
我在 spring 批处理项目的 bean 定义文件中配置了以下编写器:
现在,我希望输出到 stdout,而不是写入 /path/to/somefile,原因是我想通过命令行启动器启动此作业并将输出通过管道传输到另一个 unix 程序。
我尝试将资源属性设置为“file:/dev/stdout”,但随后出现异常:org.springframework.batch.item.ItemStreamException: Unable to create file: [/dev/stdout]
我试图看看是否有一个开箱即用的资源可以处理这个问题,但我有点不知道哪一个可以完成这项工作......
谢谢你的帮助。
编辑:以下是我根据您的建议提出的解决方案: