我最近开始使用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 example和 Reader en Writer example
我使用StepBuilder错了吗?任何人都知道如何解决这个问题?
问题已经解决:我没有配置spring应用程序上下文。这显然很重要。
答案 0 :(得分:0)
问题已经解决:我没有配置spring应用程序上下文。这显然很重要。
我还将tasklets.createTempTable(null,null)更改为tasklets.createTempTable(null,stepBuilderFactory)。