Java 具有文件名的Spring批处理作业参数
我想用SpringBatch rest控制器和动态输入文件名创建项目 我的代码:Rest控制器Java 具有文件名的Spring批处理作业参数,java,spring-boot,spring-batch,Java,Spring Boot,Spring Batch,我想用SpringBatch rest控制器和动态输入文件名创建项目 我的代码:Rest控制器 @RestController 公共类FileNameController{ @Autowired JobLauncher jobLauncher; @Autowired Job job; @RequestMapping("/launchjob") public String handle(@RequestParam("fileName") String fileName) throws Exc
@RestController
公共类FileNameController{
@Autowired
JobLauncher jobLauncher;
@Autowired
Job job;
@RequestMapping("/launchjob")
public String handle(@RequestParam("fileName") String fileName) throws Exception {
Logger logger = LoggerFactory.getLogger(this.getClass());
try {
JobParameters jobParameters = new JobParametersBuilder()
.addString("input.file.name", fileName)
.addLong("time", System.currentTimeMillis())
.toJobParameters();
jobLauncher.run(job, jobParameters);
} catch (Exception e) {
logger.info(e.getMessage());
}
return "Done";
}
}
作业配置:
@Configuration
@启用批处理
公共类JobConfig{
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
Filetasklet ft=new Filetasklet();
Logger log = LoggerFactory.getLogger(this.getClass().getName());
private String pathFile = urlCoffreFort + "\\" + ft.getFileName();
// => Configuration of Job
@Bean
public Job job() throws IOException {
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer())
.flow(step1())
.end()
.build();
}
//###### Steps
// => Step cecStep1
@Bean
public Step step1() throws IOException {
return stepBuilderFactory.get("fileDecrypt")
.<Person, String>chunk(100)
.reader(reader1())
.processor(processor1FileDecrypt())
.writer(writer1())
.faultTolerant()
.skip(Exception.class)
.skipLimit(100)
.build();
}
// ####### readers
// => reader1()
@Bean
public FlatFileItemReader<Person> reader1() throws IOException{
return new FlatFileItemReaderBuilder<CSCivique>().name("personItemReader")
.resource(new ClassPathResource(pathFile))
.delimited()
.delimiter(";")
.names(new String[] { "id", "nomNaissance", "prenom" })
.targetType(CSCivique.class)
.build();
}
// ######Processors
@Bean
public PersonItemProcessor1FileDecrypt processor1FileDecrypt() {
return new PersonItemProcessor1FileDecrypt();
}
// ######Writers
@Bean
public FlatFileItemWriter<String> writer1() {
return new FlatFileItemWriterBuilder<String>().name("greetingItemWriter")
.resource(new FileSystemResource("sav/greetings.csv"))
.lineAggregator(new PassThroughLineAggregator<>()).build();
}
}
当我编写url时:
控制台打印:
PreparedStatementCallback;错误的SQL语法[从批处理作业实例中选择作业实例ID、作业名称,其中作业名称=?和作业密钥=?];嵌套异常为org.postgresql.util.PSQLException:错误:关系批处理作业实例不存在
职位:39
我没有请求,通常框架将创建它的表 SpringBatch不会决定在生产数据库中代表您创建表。你需要做出决定,并提前手动完成。否则,如果您使用SpringBoot,您可以通过设置Spring.batch.initializeschema=always来告诉SpringBoot为您的应用程序执行此操作
有关类似的问题/答案,请参阅。错误消息有什么不可理解的地方?我没有请求,通常框架将创建其表。我添加了一个答案,希望能有所帮助。