java - 同时在不同线程上处理目录中的文件 - Java Spring
问题描述
我想使用线程同时处理目录中的所有 CSV 文件。我得到了一些东西,但文件没有被处理。其他人可以帮助我吗?似乎我的消息数组列表保持为空,并且什么也没有发生。我使用了 Executorservice,我也在使用 spring。
这是我的文件生成器类。
public class FileGenerator implements MessageGenerator {
@Getter
private static List<CameraMessage> messages;
private final ExecutorService pool = Executors.newCachedThreadPool();
private static Logger logger = Logger.getLogger((FileGenerator.class.getName()));
public FileGenerator(String folderpath) {
String dir = System.getProperty("user.dir");
File inputfolder = new File(dir + folderpath);
messages = new ArrayList<>();
for (File fileEntry : inputfolder.listFiles()) {
pool.execute((() -> {
logger.info("pool executed");
try {
FileReader filereader = new FileReader(fileEntry);
// Create csvReader object and skip first line (Header line)
CSVReader csvReader = new CSVReaderBuilder(filereader)
//.withSkipLines(1)
.build();
List<String[]> allData = csvReader.readAll();
System.out.println();
LocalDateTime dateTime = LocalDateTime.now();
// Create message list from CSV lines
for (String[] row : allData) {
CameraMessage message = new CameraMessage(
Integer.parseInt(row[0]),
row[1], dateTime,
Integer.parseInt(row[2]));
System.out.println(message.toString());
messages.add(message);
}
} catch (Exception e) {
logger.warning(e.getMessage());
}
}));
}
@Override
public CameraMessage generate() {
if (messages.isEmpty()) {
System.exit(0);
}
return messages.remove(0);
}
在这里我有我的生成器配置,因为我使用的是 spring:
@Configuration
public class GeneratorConfig {
@Value("${filemode.folder}")
private String folderpath;
@Bean
@ConditionalOnProperty(name="load", havingValue = "file")
public MessageGenerator fileGenerator(){
return new FileGenerator(folderpath);
}
@Bean
@ConditionalOnProperty(name="load", havingValue = "random")
public MessageGenerator randomMessageGenerator(){
return new RandomMessageGenerator();
}
}
解决方案
推荐阅读
- r - 安装特定 R 包时出错
- php - 是否有一个内置的 php 字符串函数可以返回两个字符串不同的第一个位置?
- aws-lambda - Remove Uploaded zip file from lambda function
- c# - Model is null when url.action is called in asp.net
- android - Azure Release Task App Center Distribute Taking Longer Than an Hour to Complete
- python-3.x - __enter__ , __exit__ , with 块不起作用
- json - Is there any way to get JsonProvider to parse this as an array of items, rather than a named list?
- javascript - 组件销毁后侦听器仍处于活动状态
- jenkins-plugins - Jenkins Xvfb 插件 - 选择不正确的 -fbdir 名称
- android - Cannot connect to the API using Volley