Csv 作业之前的测试文件名

Csv 作业之前的测试文件名,csv,spring-batch,Csv,Spring Batch,我试图使用spring batch将数据从csv文件导入数据库,我要做的是测试目录是否为空,文件名是否为空。在作业开始之前,它必须匹配某个模式。如果匹配,它应该启动作业并读取文件,如果不匹配,则将其移动到被拒绝的文件夹。问题是,我在哪里做测试部分?我尝试将其放在ItemReader之前 @Bean public FlatFileItemReader<SMS> reader(){ try { //here//

我试图使用spring batch将数据从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;
      }
@Bean
公共FlatFileItemReader()读取器{
试一试{
//这里//
}
}捕获(IOE异常){
e、 printStackTrace();
}
FlatFileItemReader CSVReader=新的FlatFileItemReader();
CSVReader.setLinesToSkip(1);
CSVReader.setName(“SMSItemReader”);
setResource(新类路径资源(fileInput+“”);
setLineMapper(lineMapper());
返回CSVReader;
}

但是不起作用,不能把它放在步骤中,因为它应该返回一个步骤,我迷路了,有人能帮我吗?

你不应该在bean定义方法中编写这样的代码。此方法旨在定义项读取器bean。您尝试执行的操作适用于
作业执行决策器
(这是许多选项中的一个)。作业执行决策器是您可以放置逻辑来决定是否应该执行作业的地方,就像在您的案例中检查目录内容和文件名模式一样


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

我可以使用ItemReadListener之类的侦听器吗?在我的情况下,我必须在阅读过程之前执行测试如果您想使用侦听器,那么使用
JobExecutionListener
(或
StepExecutionListener
)比
itemreadstener
IMO更合适,因为整个步骤的执行取决于您正在检查的条件。这里缺少什么来接受答案?我相信它通过一个例子的链接回答了你的问题,所以请接受它或投票:stackoverflow.com/help/someone-answers。否则,请让我知道遗漏了什么。非常感谢。