首页 > 解决方案 > 作业前测试文件名

问题描述

我正在尝试使用spring批处理将数据从csv文件导入数据库,我想做的是测试目录是否为空和文件名 - 它必须在作业开始之前匹配某个模式,如果它匹配它应该启动作业如果没有则读取文件然后将其移动到被拒绝的文件夹中。问题是我在哪里做测试部分我尝试将它放在 ItemReader 之前

 @Bean
      public FlatFileItemReader<SMS> reader(){
          try {
            //here//
            }
            
        
        } catch (IOException e) {
            e.printStackTrace();
        }
          
          FlatFileItemReader<SMS> CSVReader=new FlatFileItemReader<SMS>();
          CSVReader.setLinesToSkip(1);
          CSVReader.setName("SMSItemReader");
          CSVReader.setResource(new ClassPathResource(fileInput+""));
          CSVReader.setLineMapper(lineMapper());
         
        return CSVReader;
      }

但是没有用,也不能把它放在步骤中,因为它应该返回一个步骤,我迷路了,任何人都可以帮助我请

标签: csvspring-batch

解决方案


您不应该在 bean 定义方法中编写此类代码。此方法旨在定义一个项目阅读器 bean。您正在尝试做的事情适合 a JobExecutionDecider(这是许多其他选项中的一个)。作业执行决策器是您可以放置​​逻辑来决定是否应该执行作业的地方,例如检查您的案例中的目录内容和文件名模式。

您可以在文档的Programmatic Flow Decisions部分找到更多详细信息和代码示例。


推荐阅读