Spring Batch是一个轻量级,全面的框架,旨在实现对企业系统日常运营至关重要的批处理应用程序的开发。此上下文中的批处理应用程序是指针对批量数据处理的自动离线系统。
Spring Batch Partitioner:如何使具有 Spring Batch 功能的 Spring Boot 应用程序作为多节点工作
我们有一个 Spring Boot 应用程序,专门用于处理 Spring 批处理作业。在这里,我们使用 Spring Batch Parter 方法。选择这种方法是因为我们需要可恢复性/
我正在使用 Spring Batch 和 StaxEventItemReader 读取下面的 xml 文件 xml 文件示例: 我正在使用 Spring Batch 来读取下面的 xml 文件 StaxEventItemReader xml 文件示例: <ArrayOfStoreTransaction CustomerID="C1"> <PurchaseHistory Type="purchase.001" Count="2"> <StoreTransaction> <CustomerID>C1</CustomerID> <CustomerAccount>C1A</CustomerAccount> </StoreTransaction> <StoreTransaction> <CustomerID>C1</CustomerID> <CustomerAccount>C1A</CustomerAccount> </StoreTransaction> </PurchaseHistory> <PurchaseHistory Type="purchase.002" Count="1"> <StoreTransaction> <CustomerID>S3</CustomerID> <CustomerAccount>S3A</CustomerAccount> </StoreTransaction> </PurchaseHistory> <PurchaseHistory Type="purchase.003" Count="2"> <StoreTransaction> <CustomerID>S3</CustomerID> <CustomerAccount>S3A</CustomerAccount> </StoreTransaction> <StoreTransaction> <CustomerID>S3</CustomerID> <CustomerAccount>S3A</CustomerAccount> </StoreTransaction> </PurchaseHistory> </ArrayOfStoreTransaction> 这也是我用于绑定 xml 的对象 @XmlRootElement(name = "PurchaseHistory") @XmlAccessorType(XmlAccessType.FIELD) @Data public class PurchaseHistoryList { @XmlAttribute(name = "Type") private String type; @XmlAttribute(name = "Count") private int count; @XmlElement(name = "StoreTransaction") private List<StoreTransaction> storeTransactions; } @XmlAccessorType(XmlAccessType.FIELD) @Data class StoreTransaction { @XmlElement(name = "CustomerID") private String customerID; @XmlElement(name = "CustomerAccount") private String customerAccount; } 这是我的配置类: @Configuration @EnableBatchProcessing public class BatchConfiguration { @Bean public Step reportStep(StepBuilderFactory stepBuilderFactory, PlatformTransactionManager platformTransactionManager, ItemStreamReader<PurchaseHistoryList> reportItemReader, ItemWriter<PurchaseHistoryList> reportItemWriter, @Value("${chunk.size}") Integer chunkSize) { return stepBuilderFactory.get("reportStep") .transactionManager(platformTransactionManager) .<PurchaseHistoryList, PurchaseHistoryList>chunk(chunkSize) .reader(reportItemReader) .writer(reportItemWriter) .build(); } @Bean public Job reportJob(JobBuilderFactory jobBuilderFactory, JobRepository jobRepository, Step reportStep) { return jobBuilderFactory.get("reportJob") .repository(jobRepository) .start(reportStep) .build(); } @Bean public Unmarshaller paymentUnmarshaller() { Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); marshaller.setClassesToBeBound(PurchaseHistoryList.class); return marshaller; } @Bean @StepScope public ItemStreamReader<PurchaseHistoryList> reportItemReader(@Value("#{jobParameters[filePath]}") String filePath) { StaxEventItemReader<PurchaseHistoryList> reader = new StaxEventItemReader<>(); reader.setResource(new FileSystemResource(filePath)); reader.setFragmentRootElementName("PurchaseHistory"); reader.setUnmarshaller(paymentUnmarshaller()); return reader; } @Bean public ItemWriter<PurchaseHistoryList> reportItemWriter(PurchaseHistoryListRepository repository) { return new PurchaseHistoryListWriter(repository); } } 我想要的是将块应用到 StoreTransaction 对象列表上。例如,如果块大小设置为 1,则提供给编写器的每个 PurchasingHistoryList 在每次迭代中应仅包含一个 StoreTransaction 对象。 那是不可能的。您将一项定义为 PurchaseHistory XML 元素,其中可能包含一个或多个 StoreTransaction 元素。 块大小应用于外部项目(而不是嵌套项目)。
我有一个 Spring Batch 作业,它从一个 mongo 集合中读取并写入另一个集合,读者使用 mongoTemplate 的 findOne 查询来查找具有特定名称字段值的文档。来源
如何在 Spring Batch 中使用 MongoItemReader 进行聚合查询
需求发生了一些变化,我必须在 setQuery() 中使用聚合查询而不是基本查询。这可能吗? 请建议我该怎么做?我的聚合查询已准备就绪,但是...
Spring Batch 远程分块和远程分区有什么区别? 我无法理解 Spring Batch 中远程分块和远程分区之间的区别。可以吗...
Spring 批处理分区器:如何将 reader 类扩展为 bean 并在配置类中引用它
这是我的配置类, @豆 @StepScope 公共 JdbcPagingItemReader pagingItemReader( @Value("#{stepExecutionContext['fromRow']}")
Spring 批处理 - 创建一个文件,然后从同一个文件中读取
我应该从多个文件中读取,然后在应用一些处理和转换逻辑后写入单个文件。 为此,我创建了一个包含 3 个步骤的批处理作业,...
BeanCreationException:无法注入字段:不能有现有值
我在 Spring Batch 中为作业创建了一个测试类,效果很好。但是我必须添加一个扩展,它扩展了 SpringExtends,然后我收到一条错误消息,指出嵌套异常是 java.lang。
我正在将 Java 从 8 升级到 21,将 Spring boot 从 2.2 升级到 3.2.2,以遵循 Spring Boot 和批处理迁移指南以及 Java 迁移指南。
无法调用“org.springframework.jdbc.core.JdbcTemplate.update(String, Object[])”,因为“this.jdbcTemplate”为空
我有一个Spring Batch项目,我需要在JobExecutionListener中集成一个jdbcTemplate。所以我配置了我的数据源和jdbcTemplate,如下所示: 导入java.util.Objects; 导入j...
我正在尝试颠倒地读取 spring 批处理中的文件,为此我创建了一个自定义阅读器,如下所示: 导入 org.springframework.batch.item.ItemReader; 导入 java.io.BufferedReader; 我...
我正在尝试测试批处理作业的一个步骤,为此我模拟了调用 downloadService.downloadFile(),但是当我运行测试时,调用 downloadService.downloadFile() 只是执行而不是模拟。 我的
为什么 SELECT VERSION FROM BATCH_JOB_EXECUTION WHERE JOB_EXECUTION_ID=?什么也没返回?
我正在 Spring 批处理测试的帮助下测试 Spring 批处理应用程序。我已经在 h2 数据库中手动创建了 spring 批量测试使用的表。然而当测试启动时...
执行作业时遇到致命错误:org.springframework.dao.EmptyResultDataAccessException:结果大小不正确:预期为1,实际为0
我正在将 Spring boot/批处理代码从 1.4.0 升级到 2.7.2。迁移已完成,大部分代码正在运行。代码被部署到 JBOSS7/wildfly。 我在执行时遇到错误...
我正在开发 Spring Boot Batch 示例。在此示例中,我收到以下错误。使用 spring-boot-starter-parent 是 2.0.3.RELEASE。 我怀疑 Spring Boot 希望得到表格
我的程序逻辑有Spring-batch和一些带有策略模式的处理工作。 (在 JDK 8 上使用) 但它的值对象太多,并且会产生大量堆内存。 (编辑:平均而言,一份工作有超过
我的程序逻辑有Spring-batch和一些带有策略模式的处理工作。 (在 JDK 8 上使用) 但它的值对象太多,并且会产生大量堆内存。 (平均一个职位有3000多个
JPA 使用新 ID 获取和插入与数据库中的新行相同的行时出现错误“实例的标识符已更改”
我需要从表中提取行进行一些更改,然后将它们作为新行插入同一个表中。我收到实例的错误标识符已更改。这是我的代码。 列表 我需要从表中提取行进行一些更改,然后将它们作为新行插入同一个表中。我收到实例的错误标识符已更改。这是我的代码。 List<OrderInfo> orderinfo = ordeRepository.findByOrderId(fetchOrderId); orderinfo.stream() .forEach(oi -> { oi.setOrderId(newOrderId); oi.setId(null); }); orderInfoRepository.saveAll(orderinfo); 当您通过存储库找到 orderinfo 时,这些实体的状态更改为托管,并且当您更改该实体的任何属性时,persistenceContext 将跟踪更改,并对该实体进行更改,但您正在更改 persistenceContext 和数据库通过它知道每个实体,所以如果你想创建新记录,你可以这样做,并让框架给出新的 id: newOrderIdList<OrderInfo> orderinfo = ordeRepository.findByOrderId(fetchOrderId); List<OrderInfo> newRecords = orderinfo.stream() .map(o->new OrOrderInfo(newOrderId,o.whatevr)).collect(Collectors.toList()); orderInfoRepository.saveAll(newRecords);
使用基于 XML 的 bean 定义时的 StepScope bean 重复
我有以下 spring boot 2 设置,仅当使用基于 XML 的 bean 定义时,它才会在启动期间抛出 BeanDefinitionOverrideException ,在使用基于 Java 的 bean 定义时同样有效...
我正在构建一个 spring-batch 解决方案,其中包含以下过程: 步骤 1:将一个列表拆分为多个列表 步骤2:处理每个子列表 步骤 3:合并子列表 生成的子li...