одновременный доступ к файлам - PullRequest
0 голосов
/ 20 октября 2019

У меня есть исполняемый файл JAR, который запускается для обработки файлов в исходном каталоге. При начале обработки файла он перемещается в каталог «обработка» и, наконец, перемещается в завершенный каталог.

Этот исполняемый файл JAR запускается с помощью задания cron

Проблема IСтолкнулись с тем, что выполняемые прогоны JAR перекрываются, т. е. один прогон не завершен, а второй прогон запущен.

Таким образом, одновременно выполняется 2 или более исполняемых jar-файла для обработки файлов из одного и того же исходного каталога.

Идея состоит в том, что файл перемещается в каталог «обработка». при выполнении исполняемого файла jar файл не будет виден другому исполняемому файлу jar, запущенному в исходном каталоге.

Однако, похоже, что 2 или более исполняемых jar-файла получают файл в исходном каталоге и начинают обработку файла. Следствием этого является то, что только один исполняемый jar-файл может завершить обработку файла, а другие, которые считали, что имеют эксклюзивный доступ к файлу, не работают, потому что файла больше нет.

Я используюFiles.move (srcPath, targetPath), предоставляемый в классе Files, который находится в пакете java.nio.file, для перемещения файлов между каталогами.

Любые предложения о том, как обеспечить, чтобы только один исполняемый jar-файл выполнял процесс aфайл за раз, пожалуйста?

Спасибо

Пит

1 Ответ

1 голос
/ 21 октября 2019

Хорошие примеры java.nio.channels.FileLock см. Как заблокировать файл с помощью java (если возможно)

Эксклюзивно-блокировать каждый srcPath перед его обработкой.

В целом, как указано выше, убедитесь, что запущен только один экземпляр вашей программы. Создайте определенный файл блокировки, к которому у вас есть эксклюзивный доступ от начала до конца. Используйте tryLock() и выйдите, если вы не можете получить его (поскольку это будет означать, что другой экземпляр уже имеет его).

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