当前位置: 首页 > 知识库问答 >
问题:

具有文件名的Spring批处理JobParameters

杜哲彦
2023-03-14

我想创建带有Spring批处理Rest控制器和动态输入html" target="_blank">文件名的项目。

我的代码:Rest控制器

@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

@EnableBatchProcessing公共类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();
        }

}

我写网址的时候:http://localhost:8080/launch job?fileName=djecc5cpt.csv控制台打印:

SQL语法[SELECTJOB_INSTANCE_ID,JOB_NAMEBATCH_JOB_INSTANCEJOB_NAME=?JOB_KEY =?]; 嵌套异常org.postgresql.util.PSQLException: ERROR:关系batch_job_instance不存在

共有1个答案

黄俊誉
2023-03-14

我没有请求,通常框架会创建它的表

Spring Batch不会决定在生产数据库中为您创建表。您需要提前手动做出决定。否则,如果您使用Spring Boot,您可以通过设置< code > spring . batch . initialize-schema = always 告诉Spring Boot为您这样做。

请参阅https://stackoverflow.com/a/51891852/5019386类似的问题/答案。

 类似资料:
  • 我知道匹配模式解析器,这是Spring批处理提供的。我需要关于如何构造批处理作业的帮助,以便它可以读取循环中的记录类型5和记录类型6。

  • 我有一个包含多个json文件的zip文件。我已解压缩它们,然后使用以下代码从json获取POJO对象: 但我需要使用spring批处理逐个处理这些json文件。有人能帮助我如何在spring批处理中实现这一点吗?我想使用1000块来读取json文件。我的json对象非常复杂。例子:

  • 总之,我有一个要求,在使用Spring批处理时,我确实生成了最终结果文件。生成文件后,我需要使用SFTP将它们传输到另一个服务器。现在我把它们看成是两个独立的程序。有没有办法让我把这两个结合起来?我想知道我是否可以使用Spring批处理生成文件,然后立即将文件传输到生成文件的同一程序中的另一个服务器。 我是一个新的Spring批次,所以寻找可能的方法。 不确定为什么会出现连接超时错误。 XML配置

  • 需要读取spring批处理中的文件,对其进行处理并将其作为一个提要保存。一个提要包含50%的信息。当我必须持久化提要的最终结果时,我需要使用公共字段将它们组合起来,并像一个项目一样持久化。请参见下面的示例。 我需要保留的最终信息如下: 请建议我如何在我的Spring批工作中实现这一点。 谢谢

  • 我编写了一个用于简单查询的spring批处理应用程序。这对于第一次使用某些作业Id很好,但是对于下一次执行,它需要新的作业Id。为此编写了jobParamIncrementer类,仍然得到bean defn未找到异常。我不太明白发生了什么。请帮帮我。 下面是堆栈跟踪。 乔布伦纳(主班)

  • 主要内容:创建批处理文件,保存批处理文件,执行批处理文件,修改批处理文件在本章中,我们将学习如何创建,保存,执行和修改批处理文件。 创建批处理文件 批处理文件通常在记事本中创建。 因此,最简单的方法是打开记事本并输入脚本所需的命令。 对于这个练习,打开记事本并输入以下语句。 保存批处理文件 在创建批处理文件后,下一步是保存批处理文件。 批处理文件的扩展名为或。 命名批处理文件时需要注意的一些常规规则 - 在命名批处理文件时避免使用空格,有时会在从其他脚本中调用时产生问