spring-batch 相关问题

Spring Batch是一个轻量级,全面的框架,旨在实现对企业系统日常运营至关重要的批处理应用程序的开发。此上下文中的批处理应用程序是指针对批量数据处理的自动离线系统。

Spring-Batch 读取器、处理器和写入器

我需要创建一个 Spring Batch 作业,从 MySQL 读取各种数据,将这些数据放入 .csv 文件中,然后将该文件发送到 Google Cloud Storage。 我想了解架构...

回答 1 投票 0

使用 FlatFileItemReader xML 的 Spring Batch 空文件

我正在尝试验证输入文件是否为空或有数据。 我正在通过 XML beans 配置使用 Spring Batch,我的实际配置如下: 我正在尝试验证输入文件是否为空或有数据。 我正在通过 XML beans 配置使用 Spring Batch,我的实际配置如下: <!-- READERS --> <bean id="mgbfItemReader" class="org.springframework.batch.item.file.FlatFileItemReader"> <property name="strict" value="false" /> <!-- Read a file --> <property name="resource" value="file:///fichtemcomp/datent/#{processDataClass.fileName}" /> <property name="linesToSkip" value="10" /> <property name="encoding" value="UTF-8" /> <!-- Mapper --> <property name="lineMapper"> <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper"> <!-- split it --> <property name="lineTokenizer"> <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"> <property name="delimiter" value="|" /> <!-- Valores del layout --> <property name="names" value="name,secondName,lastName" /> </bean> </property> <!-- Wrapper --> <property name="fieldSetMapper"> <bean class="com.bbva.mgbf.batch.listeners.ScholarItemReader"> </bean> </property> </bean> </property> </bean> <!-- END READERS --> 在我的 Scholar ItemReader 课程中,我有类似的内容: @Override public Map<String, Object> mapFieldSet(FieldSet fieldSet) throws BindException { LOGGER.info("Reading all items \t {}", fieldSet); LOGGER.info("FieldCount \t {}", fieldSet.getFieldCount()); Map<String, Object> dataIn = new HashMap<>(65); if (fieldSet.getFieldCount() > 0 && !fieldSet.readString(0).trim().isEmpty()) { LOGGER.info("in if "); for (int i = 0; i < 65; i++) { String key = "" + i; String value = fieldSet.readString(i); dataIn.put(key, value); } }else{ dataIn.put("empty", "emptyFile"); } return dataIn; } 但它从未进入“else”声明中,它只是结束了该过程。 有人知道是否有另一种方法来验证文件是否为空? fieldSetMapper 当读者已经读取一行时被调用,因此尝试检查映射器中的文件是否为空在该过程中为时已晚。 我正在尝试验证输入文件是否为空或有数据 我将使用预验证 tasklet 步骤来检查文件是否为空。 我使用添加到具有 NoWorkFoundStepExecutionListener 的步骤中的自定义 FlatFileItemReader 来处理它。 下面是自定义监听器: @Component public class CustomNoWorkFoundStepExecutionListener implements StepExecutionListener { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public ExitStatus afterStep(StepExecution stepExecution) { final var totalItemsReadInStep = stepExecution.getReadCount(); if (totalItemsReadInStep == 0) { logger.error("Data flat file is empty."); stepExecution.setExitStatus(ExitStatus.FAILED); return ExitStatus.FAILED; } logger.info("Total items read from data flat file → [{}]", totalItemsReadInStep); return null; } } 以下是带有项目读取器、处理器、写入器和上述自定义侦听器的步骤的配置: @Bean public Step dataInputStep(JobRepository jobRepository, DataSourceTransactionManager transactionManager, FlatFileItemReader<DataRecord> dataReader, ItemProcessor<DataRecord, DataEntity> dataRecordProcessor, RepositoryItemWriter<DataEntity> dataRepositoryItemWriter, CustomNoWorkFoundStepExecutionListener listener) { return new StepBuilder("dataInputStep", jobRepository) .<DataRecord, DataEntity>chunk(10, transactionManager) .reader(dataReader) .processor(dataRecordProcessor) .writer(dataRepositoryItemWriter) .listener(listener) .build(); }

回答 2 投票 0

Spring批处理表未创建时无异常

如果未创建 BATCH_JOB_EXECUTION_CONTEXT,我得到的只是: 引起原因:org.springframework.jdbc.BadSqlGrammarException:PreparedStatementCallback;错误的 SQL 语法 [INSERT INTO

回答 3 投票 0

Spring Batch 作业未启动

`我刚刚开始使用春季批次。我已经完成了 spring Batch 的所有配置。但这些工作还没有启动。相反,tomcat 服务器正在启动。这是我的配置 @

回答 3 投票 0

动态查询时FlatFileHeaderCallback的使用

我有一个 Spring Batch 应用程序,它从数据库读取数据并写入 CSV 文件。 CSV 文件需要一个标头,可以使用 Spr 的 FlatFileItemWriter 中的 FlatFileHeaderCallback 接口提供标头...

回答 1 投票 0

FlatFileItemWriter 仅在数据存在的情况下写入标头

有一个任务,仅当存在某些数据时才将标头写入文件,换句话说,如果读取器不返回任何内容,则写入器创建的文件应该为空。 不幸的是 FlatFileItemWriter 实现,在版本中......

回答 3 投票 0

“select * into”太慢

我在sql server中有一个存储过程: 创建或更改过程 dbo.basic_json_normalization_full @tableNamep 系统名, @tableName 系统名, @columns_list NVARCHAR(最大), @json_query

回答 1 投票 0

spring.batch.jdbc.initialize-schema=ALWAYS 区分大小写

我遇到了一个奇怪的问题。当“always”写成小写时 (spring.batch.jdbc.initialize-schema=always 区分大小写), Spring Batch 不为我生成表。然而,当我写下它时...

回答 1 投票 0

将 Spring Batch 从 4.3.x 升级到 5.0.x

目前我正在使用基于 Mongo DB 的作业存储库将 Spring Boot 2.7.x (Spring Batch 4.3.x) 迁移到 Spring Boot 3.0.x (Spring Batch 5.0.x) @配置 公共类 MainBatchConfigurer

回答 1 投票 0

在 Spring Batch 中使用 Spring 表达式语言检索作业参数的问题

我正在使用 Spring Batch 应用程序,我从控制器调用 jobLauncher 并将作业参数传递给它。但是,我在尝试检索这些参数时遇到了问题......

回答 1 投票 0

Spring Batch 4 与 Spring Boot 3 兼容吗?

目前我正在尝试将 Spring Boot 从 2.6.x 迁移到 3.x。我升级了 h2、hibernate,还升级为使用 Jakarata EE。我还有 4.x 版本的 Spring Batch。 默认情况下 Spring Boot ...

回答 1 投票 0

spring 批处理管理 ui 未显示已配置的作业

我已成功将 spring boot 与 spring-batch-admin 集成。我使用 spring-batch 的示例指南来设置作业。我在作业中添加了更多的 tasklet。我的用户界面只显示一个...

回答 1 投票 0

将 AsyncItemWriter 与 CompositeItemWriter 结合使用

AsyncItemWriter 可以与 CompositeItemWriter 一起使用吗? 从源代码来看: 公共类 CompositeItemWriter 实现 ItemStreamWriter,InitializingBean 公共接口

回答 1 投票 0

如何在 ItemWriteListener 实现的类中获取作业名称或步骤名称

这是我的实现,我想打印作业名称或步骤名称以及错误消息。 我怎样才能做到这一点? 公共类 WriterListener 实现 ItemWriteListener { 私有静态最终

回答 1 投票 0

Spring Batch AWS S3 资源 - 处理过程中连接重置

我有一个 Spring Batch 应用程序,预计会从 AWS S3 读取大型 csv(每个大小 200mb)并将数据写入我们的数据库。我们稍微更新了流程以适应新的 csv

回答 1 投票 0

Spring Batch 当我使用多线程 java.lang.NullPointerException

我在使用 Spring Batch 多线程时遇到错误。错误:无法读取字段“item”,因为“x”为空 当我不使用多线程时,我不会收到任何错误。 我不知道

回答 1 投票 0

Spring 批处理不选择任务执行器

这是我的 spring 批处理配置: @RequiredArgsConstructor @配置 @Slf4j @EnableBatchProcessing 公共类 SpringBatchConfig { 私有最终 JobBuilderFactory jobBuilderFactory; 公关...

回答 1 投票 0

使用 Airflow 安排 Spring Batch 作业

我正在尝试使用 Airflow 在本地 Kubernetes 上安排 Spring Batch 作业,但找不到足够的文档。 我正在寻找一些文档,其中包含安排 Spring B 的步骤...

回答 1 投票 0

Spring Batch 中所有 chunk 中处理的记录总数

我正在使用 Spring Batch 从关系数据库中读取记录并使用 Chunk 写入无 SQL 数据库。我想记录作业完成后处理的记录总数。 我找不到任何

回答 1 投票 0

如何使用junit5 jupiter引擎运行@SpringBatchTest

我按照下面的链接编写端到端春季批处理作业测试。 https://docs.spring.io/spring-batch/docs/current/reference/html/testing.html#endToEndTesting 这告诉你注释你的测试......

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.