从 ExecutionContext 设置 IteamReader 输入
Set IteamReader input from ExecutionContext
我在 Spring Batch 中的第一步实际上是从服务器下载 CSV 并为其分配一个动态名称并将其存储在 ExecutionContext 中。
现在的问题是如何在创建 bean 时将输入文件的名称传递给 FlatFileItemReader。
举个例子:
@Bean
public FlatFileItemReader<Customer> customerItemReader() {
FlatFileItemReader<Customer> reader = new FlatFileItemReader<>();
reader.setLinesToSkip(1);
reader.setResource(new ClassPathResource("/data/customer.csv"));
DefaultLineMapper<Customer> customerLineMapper = new DefaultLineMapper<>();
DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
tokenizer.setNames(new String[] {"id", "firstName", "lastName", "birthdate"});
customerLineMapper.setLineTokenizer(tokenizer);
customerLineMapper.setFieldSetMapper(new CustomerFieldSetMapper());
customerLineMapper.afterPropertiesSet();
reader.setLineMapper(customerLineMapper);
return reader;
}
请注意,reader.setResource(new ClassPathResource("/data/customer.csv"))
是在创建 bean 时 设置的。
如何将信息从 ExecutionContext
传递到 FlatFileItemReader
作为输入源?
我需要查找 Spring 批处理表吗?
创建您的 bean @StepScope
或 @JobScope
并使用 @Value
获取值。
@Bean
@StepScope
public FlatFileItemReader<Customer> customerItemReader(@Value("#{stepExecutionContext['your.name']} String file) {
// Bean creation logic here.
}
现在,如果您愿意花时间阅读 the documentation,您就会自己阅读。
我在 Spring Batch 中的第一步实际上是从服务器下载 CSV 并为其分配一个动态名称并将其存储在 ExecutionContext 中。
现在的问题是如何在创建 bean 时将输入文件的名称传递给 FlatFileItemReader。
举个例子:
@Bean
public FlatFileItemReader<Customer> customerItemReader() {
FlatFileItemReader<Customer> reader = new FlatFileItemReader<>();
reader.setLinesToSkip(1);
reader.setResource(new ClassPathResource("/data/customer.csv"));
DefaultLineMapper<Customer> customerLineMapper = new DefaultLineMapper<>();
DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
tokenizer.setNames(new String[] {"id", "firstName", "lastName", "birthdate"});
customerLineMapper.setLineTokenizer(tokenizer);
customerLineMapper.setFieldSetMapper(new CustomerFieldSetMapper());
customerLineMapper.afterPropertiesSet();
reader.setLineMapper(customerLineMapper);
return reader;
}
请注意,reader.setResource(new ClassPathResource("/data/customer.csv"))
是在创建 bean 时 设置的。
如何将信息从 ExecutionContext
传递到 FlatFileItemReader
作为输入源?
我需要查找 Spring 批处理表吗?
创建您的 bean @StepScope
或 @JobScope
并使用 @Value
获取值。
@Bean
@StepScope
public FlatFileItemReader<Customer> customerItemReader(@Value("#{stepExecutionContext['your.name']} String file) {
// Bean creation logic here.
}
现在,如果您愿意花时间阅读 the documentation,您就会自己阅读。