csv - 作业前测试文件名
问题描述
我正在尝试使用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;
}
但是没有用,也不能把它放在步骤中,因为它应该返回一个步骤,我迷路了,任何人都可以帮助我请
解决方案
您不应该在 bean 定义方法中编写此类代码。此方法旨在定义一个项目阅读器 bean。您正在尝试做的事情适合 a JobExecutionDecider
(这是许多其他选项中的一个)。作业执行决策器是您可以放置逻辑来决定是否应该执行作业的地方,例如检查您的案例中的目录内容和文件名模式。
您可以在文档的Programmatic Flow Decisions部分找到更多详细信息和代码示例。
推荐阅读
- c - C 程序计算字符串中的用户输入并将总成本打印到 int 中
- html - CSS Grid 中的行高扩展
- c++ - 如何在 if 语句中设置字符串值?(C++)
- keras - Keras 中 LSTM 的多变量输出的输出序列
- r - 如何在 r 中找到我的 PCA 图中的数据点?
- google-cloud-platform - 谷歌计算引擎 - 没有资源
- swift - 获取位置点和标题并在 mapkit 视图上显示
- c++ - 从另一个线程关闭和打开 QSerialPort
- azure - 如何为多租户 Azure 应用创建应用后台作业
- context-free-grammar - 语言 L = {a^(n)b^(m)c^(k): m = |i - k|} 的上下文无关文法