Весенний пакет Jobparamaters с именем файла

Я хочу создать проект с контроллером весеннего пакетного отдыха и динамическим именем входного файла.

Мой код: Контроллер отдыха

@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();
        }

}

Когда я пишу URL: http://localhost:8080/launchjob?fileName=djecc5cpt.csv Печать консоли:

Обратный вызов подготовленного заявления; неверная грамматика SQL [ВЫБЕРИТЕ JOB_INSTANCE_ID, JOB_NAME из BATCH_JOB_INSTANCE, где JOB_NAME =? и JOB_KEY =?]; вложенным исключением является org.postgresql.util.PSQLException: ОШИБКА: отношение "batch_job_instance" не существует Позиция: 39

Что непонятного в сообщении об ошибке?

Andronicus 11.03.2019 16:44

У меня нет запроса, обычно фреймворк создаст свои таблицы

Monoem Youneb 11.03.2019 16:53

Я добавил ответ, надеюсь, это поможет.

Mahmoud Ben Hassine 13.03.2019 10:28
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
527
1

Ответы 1

I do not have a request, normally the framework will create its tables

Spring Batch не будет принимать решение о создании таблиц от вашего имени в вашей производственной базе данных. Ты нужно заранее принять это решение вручную. В противном случае, если вы используете Spring Boot, вы можете указать Spring Boot сделать это за вас, установив spring.batch.initialize-schema=always.

См. https://stackoverflow.com/a/51891852/5019386 аналогичный вопрос/ответ.

Другие вопросы по теме