Обработка файлов в каталоге в разных потоках одновременно - Java Spring - PullRequest
0 голосов
/ 08 октября 2018

Я бы хотел обрабатывать все мои CSV-файлы в каталоге одновременно, используя потоки.Я получил что-то, но файлы не обрабатываются.Может ли кто-нибудь еще помочь мне?Похоже, что мой список сообщений остается пустым, и ничего не происходит.Я использовал Executorservice и тоже использую spring.

Это мой класс File Generator .

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);

}

Здесь у меня есть генератор конфигурации , потому что я использую пружину:

@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();
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...