【问题标题】:"Unable to deserialize the execution context" when creating tasklet with StepBuilder使用 StepBuilder 创建 tasklet 时“无法反序列化执行上下文”
【发布时间】:2017-05-17 08:44:04
【问题描述】:

我最近开始使用 Spring 批处理(对 Java 来说还是个新手),现在我正在尝试创建一个 tasklet,它在数据库中创建一个表。

    @EnableBatchProcessing
    @SpringBootApplication
    public class Configure {

        public static void main(String[] args)
        {
            SpringApplication.run(Configure.class, args);
        }    
    @Bean
        public Job AggregateTransactionsFromDatabaseToXML(JobBuilderFactory jobBuilderFactory,
                                                          StepBuilderFactory stepBuilderFactory,
                                                          Tasklets tasklets){return jobBuilderFactory.get("etl")
                                    .incrementer(new RunIdIncrementer())
                                    .start(tasklets.createTempTable(null, null))
                                    .build();}

        @Configuration
        static class Tasklets{
            @Bean
            Step createTempTable(DataSource dataSource, StepBuilderFactory stepBuilderFactory) {
                StepBuilder createTempTable = stepBuilderFactory.get("create temp table");
                String sql = "CREATE TABLE DatabaseName.TableName\n" +
                        "(\n" +
                        "    column1 VARCHAR(255) NOT NULL,\n" +
                        "    column2 DATE NOT NULL,\n" +
                        "    column3 DECIMAL NOT NULL,\n" +
                        "    column4 BIGINT NOT NULL,\n" +
                        "    column5 BIGINT NOT NULL\n" +
                        ")";
                return createTempTable.tasklet((contribution, chunkContext) -> {
                    new JdbcTemplate(dataSource).execute(sql);
                    return RepeatStatus.FINISHED;
                })
                                      .allowStartIfComplete(true)
                                      .build();
            }
}
}

我收到一个错误:Caused by: java.lang.IllegalArgumentException: Unable to deserialize the execution context.

我不知道这怎么可能。

我在网上使用 StepBuilder 查找示例,但找不到任何对我的任务有用的东西。 TaskletStepBuilder exampleReader en Writer example

我使用 StepBuilder 是否有误?有谁知道如何解决这个问题?

问题已解决:我没有配置spring应用上下文。这显然很重要。

【问题讨论】:

  • 你使用什么源教程(如果你能提供的话)?另外,分享完整的代码。您是否也在使用任何类型的框架,例如 Spring Boot 等?您如何设置数据源以及使用什么类型的数据库?
  • 我使用的是spring boot和mysql。数据源在 application.properties 中配置(它适用于我运行的其他步骤而不是这个 [github.com/EBIvariation/examples/blob/master/… [aboullaite.me/spring-batch-tutorial-with-spring-boot/]
  • 更正你的链接,两者都给出 404。如果可能的话,包括问题。
  • 您是否设置了诸如BATCH_JOB_INSTANCEBATCH_JOB_EXECUTION 等工作元表?这些是 Spring Batch 保存作业元数据的表。
  • 是的,我知道了。现在一切正常。我还将 tasklets.createTempTable(null, null) 更改为 tasklets.createTempTable(null, stepBuilderFactory)。

标签: java spring spring-batch


【解决方案1】:

问题已解决:我没有配置spring应用上下文。这显然很重要。

我还将 tasklets.createTempTable(null, null) 更改为 tasklets.createTempTable(null, stepBuilderFactory)。

【讨论】:

    最近更新 更多