Пакетная обработка Java - PullRequest
       20

Пакетная обработка Java

0 голосов
/ 21 сентября 2011

Я прочитаю 2000 файлов и поработаю над ними с помощью Java.Поэтому я думаю, что я должен использовать пакетную обработку.Но как я мог это сделать?Моя система - Windows 7.

Ответы [ 5 ]

3 голосов
/ 25 ноября 2012

Вы можете использовать Apache Camel / Servicemix ESB в сочетании с ActiveMQ.

Ваш первый шаг - записать имя файла один за другим в сообщениях ActiveMQ.Это может быть сделано в одном так называемом маршруте (отдельный поток автоматически платформой).Здесь у вас есть несколько вариантов, какой компонент использовать.Есть файловый компонент, который читает файлы и затем перемещает их в готовое состояние, или вы можете использовать простой Java Bean.

Во втором маршруте вы читаете сообщения Active MQ (один потребитель, если важно обработать файлыв последовательности или нескольких потребителях, если вы хотите большей производительности) обработайте содержимое файла в процессоре или Java Bean так, как вы хотите.

Вы можете остановить контекст Camel в любое время (во время обработки) и перезапустить егозатем начало процесса со следующего файла, еще не обработанного, путем загрузки / использования его из очереди сообщений Active MQ.

1 голос
/ 06 декабря 2012

Проверьте это:

http://jcp.org/en/jsr/detail?id=352

Это новый "пакет" на JSR - javax.batch

1 голос
/ 21 сентября 2011

Java не предоставляет встроенную поддержку для пакетной обработки.Вам нужно использовать что-то вроде Spring Batch .

0 голосов
/ 21 сентября 2011

Если у вас есть возможность работать с одним файлом, у вас есть два варианта: использовать список файлов или повторяться через каталог.Однако становится сложнее, если вам нужно откатить изменения в результате чего-то, что происходит ближе к концу.Вам нужно будет создать список изменений и затем зафиксировать их все в конце пакетной операции.

// first option
batchProcess(Collection<File> filesToProcess) {
    for(File file : filesToProcess) processSingle(file);
}

// second option
batchProcess(File file) {
    if(file.isDirectory()) {
        for(File child : file.listFiles()) {
            batchProcess(file);
        }
    } else {
        processSingle(file);
    }
}
0 голосов
/ 21 сентября 2011

Вы не можете читать файлы как пакет.Вы читаете по одному.Вы можете использовать более одного потока, но я бы сначала написал его однопоточным.

Не имеет значения, какую ОС вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...