标签: spring-batch

spring 批处理 StaxEventItemReader 释放异常

当我运行一个spring批处理项目时,发生了异常!

异常详情:

Caused by: java.lang.NullPointerException: null
at org.springframework.batch.item.xml.StaxEventItemReader.moveCursorToNextFragment(StaxEventItemReader.java:141) 
Run Code Online (Sandbox Code Playgroud)

文件名正确!

配置代码:

@Bean
@StepScope
public StaxEventItemReader xmlFileItemReader(@Value("#{jobParameters['fileType']}") String fileType,
                                             @Value("#{jobExecutionContext['extractFileName']}") String fileName) throws Exception {

    System.out.println("======================== fileName =========================="+fileName);

    StaxEventItemReader reader = new StaxEventItemReader();

    reader.setResource(new FileSystemResource(fileName));
    reader.setFragmentRootElementName("PortData");
    reader.setUnmarshaller(unmarshaller());

    reader.afterPropertiesSet();

    return reader;
}
Run Code Online (Sandbox Code Playgroud)

xml spring spring-batch

1
推荐指数
1
解决办法
3628
查看次数

如何聚合 Spring Batch 作业中的完整数据集?

我需要在 Spring Batch 作业中插入聚合。但是聚合步骤需要有整个数据集可用。

在纯 SQL 中,很容易编写 SQL 聚合请求:完整的数据集(存储在数据库中)可用。

但是在 Spring Batch 作业中,一切都在内存中完成,并以分块方式传播。那么如何处理那种散落的数据呢?

您对插入聚合步骤/流程的最佳实践有什么建议吗?

非常感谢您的启发

aggregate-functions spring-batch

1
推荐指数
1
解决办法
2873
查看次数

在 spring boot fat jar 中包含的多个作业中运行特定的 spring 批处理作业

我正在尝试从 spring boot fat jar 运行 spring 批处理作业,但在引用嵌套 jar 时遇到问题。

这是我使用的命令:

java -cp bignibou-batch-core/build/libs/bignibou-batch-core.jar:lib/spring-batch-core-3.0.3.RELEASE.jar org.springframework.batch.core.launch.support.CommandLineJobRunner com.bignibou.batch.configuration.BatchConfiguration mailingJob
Run Code Online (Sandbox Code Playgroud)

请注意我如何使用冒号引用嵌套的 Spring Batch jar。为什么这不起作用?

它说它找不到主类:

Erreur : impossible de trouver ou charger la classe principale org.springframework.batch.core.launch.support.CommandLineJobRunner
Run Code Online (Sandbox Code Playgroud)

java jar spring-batch spring-boot

1
推荐指数
1
解决办法
5255
查看次数

如何从 Spring 批处理作业中终止步骤

在检查记录是否在 90 天前创建的处理器中,如果阅读器读取了过时的记录,我想终止该步骤,而不是该作业。

我试过 stepExecution.setStatus()、stepExecution.setEndTime(new Date()) 等等。

任何人都可以建议一种直接而明确的方式来终止步骤吗?谢谢。

java spring-batch

1
推荐指数
1
解决办法
1万
查看次数

RetryOperationsInterceptor 发生了什么?(春批)

对于重试功能,我想使用 org.springframework.batch.retry.interceptor.RetryOperationsInterceptor.

我可以在 spring-batch 2.1.X 中找到它,但在 spring-batch 2.2.X 中找不到。

被删除了吗?它有问题吗?

如果它被删除了,我应该使用不同的方法来代替,它是什么?

aop spring spring-batch spring-retry

1
推荐指数
1
解决办法
1204
查看次数

启动spring批处理作业时将对象作为参数传递

我的服务正在启动春季批处理作业。我希望能够将一些对象传递给作业,每次这个对象参数都会不同。我需要在我的 tasklet 中使用这个对象。我正在通过 JobLauncher 开始工作。就我用谷歌搜索而言,我发现 JobParameters 在这种情况下不会帮助我。我还发现很多答案都是使用 JobExecutionContext 或其他任何东西。但我想在工作开始之前注入参数对象。有可能吗?

启动工作的服务

@Service
public class MyServiceImpl implements MyService {
    @Autowired
    private JobLauncher jobLauncher;
    @Autowired
    private Job myJob;

    @Override
    public MyResponse startJob(InputParameter inputObject) {
        try {
            //Here I want to pass somehow inputObject ot JobExecution
            jobLauncher.run(myJob, new JobParameters());
        } catch (Exception e) {
            return new MyResponse("FAILED")
        }
        return new MyResponse("OK");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的任务

@Component
@Scope("step")
public class MyTasklet implements Tasklet{

    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
        InputParameter inputObject = …
Run Code Online (Sandbox Code Playgroud)

java spring spring-batch

1
推荐指数
1
解决办法
3756
查看次数

Spring Batch 自定义编写器关闭方法被调用两次(需要特殊处理)

我有以下编写器类原型:

public class MyWriter extends AbstractItemStreamItemWriter<FieldSet> {
    ...
    @Override
    public void close()
    {
        ...
    {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的工作由以下定义@Beans

    @Bean
    protected Step step(ItemReader<FieldSet> reader, ItemWriter<FieldSet> writer)
    {
        return stepBuilder.get("step")
            .<FieldSet, FieldSet> chunk(chunkSize)
            .reader(reader)
            .writer(writer)
            .listener(this)
            .build();
    }

    @Bean
    protected Job myImportJob(Step step, JobExecutionListener jobExecutionListener)
    {
        return jobBuilder
            .get("myImportJob")
            .listener(jobExecutionListener)
            .start(step)
            .build();
    }
Run Code Online (Sandbox Code Playgroud)

该作业是从 MQ 侦听器触发的,如下所示:

@Autowired
private Job job;

@Autowired
private JobLauncher jobLauncher;

@JmsListener(destination = "queue_name")
public void receiveMessage(TextMessage message) throws JMSException
{
    log.warn("Received message {} with listener {}.", …
Run Code Online (Sandbox Code Playgroud)

java spring spring-batch

1
推荐指数
1
解决办法
1583
查看次数

Spring Boot - 没有这样的列异常

我正在编写一个Spring Batch/Boot应用程序,用于将数据从informix数据库提取到java数据对象,但我无法弄清楚java.sql.SQLException:没有这样的列名问题.

这是方法:

    public UserDo getUserAddress(UserDo item) {
    try {
        myJdbcTemplate.queryForObject(getUserAddressQuery, new RowMapper<UserDo>() {
            @Override
            public UserDo mapRow(ResultSet rs, int arg1) throws SQLException {
                try {
                    item.setAddressLine1(rs.getString("cad_add_line_1")); 
                    item.setAddressLine2(rs.getString("cad_add_line_2" + "cad_add_line_3" + "cad_add_line_4"));
                    item.setCity(rs.getString("cad_city_name"));
                    item.setState(rs.getString("cad_ste_prv_cd"));
                    item.setZip(rs.getString("cad_postal_code" + "cad_postal_cd_4"));
                    item.setCountry(rs.getString("cad_country_code"));
                } catch (SQLException sqle){
                    logger.error(sqle.getMessage(), sqle);
                }
                return item;
            }
        }, item.getUserId());
    } catch (EmptyResultDataAccessException erdae) {
        logger.error(erdae.getMessage(), erdae);
    } catch (IncorrectResultSizeDataAccessException irsdae) {
        logger.error(irsdae.getMessage(), irsdae);
    }
    return item;
}
Run Code Online (Sandbox Code Playgroud)

这是由JdbcTemplate以下各项执行的查询:

    private final String getUserAddressQuery = "select cad_add_line_1, …
Run Code Online (Sandbox Code Playgroud)

java informix spring jdbc spring-batch

1
推荐指数
1
解决办法
330
查看次数

与元素类型“属性”关联的属性“值”的值不得包含“&lt;”字符

<bean id="fileDiffTaskelt" class="org.springframework.batch.core.step.tasklet.SystemCommandTasklet" scope="step">
<property name="command" value="diff #{jobParameters['INPUT_FILE']} #{jobParameters['PREVIOUS_FILE']} |  grep -e '<' -e '>' | grep -x '.\{20\}' > #{jobParameters['FILTERED_FILE']}"/>
<property name="timeout" value="60000"/>
<property name="workingDirectory" value="/tmp/hub"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

我在 IDE 中收到此错误:与元素类型“属性”关联的属性“值”的值不得包含“<”字符。我在我的 grep 命令中使用了这个字符,非常重要,卡在这里。

spring spring-batch

1
推荐指数
1
解决办法
6293
查看次数

无法在Spring Boot应用程序中禁用ContextCredentialsAutoConfiguration

我正在开发一个Spring Batch应用程序,该应用程序应仅将AWS Cloud用于特定的配置文件。当前,我有一个使用aws的配置文件,另一个不应使用的配置文件,因为它使用本地数据库,本地文件等在本地运行应用程序(同时AWS配置文件将使用RDS,S3等)

对于使用AWS概要文件的配置,我具有以下内容:

@Configuration
@Profile("!localDev")

public class FileReaderConfigAWS {

@Value("${cloud.aws.s3.bucket}")
private String amazonS3Bucket;

@Autowired
private ResourceLoader resourceLoader;

private static final Logger logger = LoggerFactory.getLogger(FileReaderConfigAWS.class);


@Bean
@StepScope
public FlatFileItemReader<Object> flatFileReader(@Value("#{jobParameters['inputFile']}") String inputFile,  LineMapper
    lineMapper) {
    FlatFileItemReader<Object> flatFileItemReader = new FlatFileItemReader<>();

    flatFileItemReader.setResource(resourceLoader.getResource("s3://" + this.amazonS3Bucket + "/" + inputFile));

    flatFileItemReader.setLineMapper(lineMapper);

    return flatFileItemReader;
}


@Bean
public AbstractFileValidator inputFileValidator() {
    InputS3Validator inputS3Validator = new InputS3Validator();
    inputS3Validator.setRequiredKeys(new String[]{InputFileSystemValidator.INPUT_FILE});
    return inputS3Validator;
}

}
Run Code Online (Sandbox Code Playgroud)

对于我的localDev配置文件,我具有以下内容:

@Profile("localDev")
@Configuration
public class FileReaderConfigLocalDev {


@Bean
@StepScope
public FlatFileItemReader<Object> flatFileReader(@Value("#{jobParameters['inputFile']}") String …
Run Code Online (Sandbox Code Playgroud)

spring-batch spring-boot spring-cloud-aws

1
推荐指数
2
解决办法
2746
查看次数