Привет, что такой хотел узнать, который является лучшим способом выполнять файлы batch с java, формы, о которых я думаю, что возможно делать, это делая все с java а именно например я должен выполнять некие команды путь ssh думаю, что я мог бы присоединяться с java и выполнять команды используя объекты, которые позволяют мне делать это... другую форму, думаю, что состоит в том, чтобы выполнять с java чистый файл batch, что содержал связь ssh и команды..., и другая форма, которую я услышал, - используя framework, как spring, но правда я это не использовал...: Вы, кто рекомендуют меня? привет
я хотел бы узнать, который является лучшим способом выполнять файлы batch с java
У тебя есть два способа это делать. Одна используя Runtime
:
Runtime.getRuntime().exec("comando", new String[]{ "argumento" });
Другая используя ProcessBuilder
:
Process p = new ProcessBuilder("comando", "argumento").start();
"comando"
это имя твоего файла (.bat, .sh), который ты будешь выполнять.
Различие состоит в том, что первая - метод wrapper, чтобы создавать инстанцию ProcessBuilder
и выполнять процесс. Если ты хочешь добавить конфигурацию, как в какой папке находится процесс, который нужно выполнять, посылать вывод процесса в файл log или в консоль, между другими, использовать вторую форму. Если ты не нуждаешься в том, чтобы не манипулировать ничем из этого, используй первую.
другая форма я думаю, что состоит в том, чтобы выполнять с java чистый файл batch, что содержал связь ssh и команды
Это зависит действительно от команды больше, чем Java в себе. Если твоя конфигурация связи ssh может меняться много, тогда, может быть, годитесь поддерживать вышеупомянутую конфигурацию в твоем файле процесса (.bat, .sh). Иначе, если эта конфигурация статическая и не может / должна быть измененной с tant возможность, тогда, может быть, захоти "защищать это" в коде Java. Нет конкретного ответа для этого.
другая форма, которую я услышал, - используя framework, как spring, но правда я это не использовал
Спринг Бэч реализует работу обработки данных из-за частей. Например, у тебя есть таблица с тысячей реестров, тебе нужно, чтобы каждый реестр был обработан в batch, чтобы производить некую информацию, что выполнение было в параллели, в том, чтобы добавить терпимость к неудачам, и т.д., тогда для этой сцены, ты используешь Спринг Бэч. Если ты хочешь выполнить файл .bat или .sh, Спринг Бэч не вероятно то, что ты ищешь.
Ты можешь реализовывать это используя класс Runtime и посредством mГ©todo exec () :
Runtime.getRuntime().exec("cmd /c start C:\\path\\miarchivo.bat");
Не, если он подал это тебе. Я поднимаю java.jar с shell: archivo.sh
#!/usr/local/bin/bash
logeo=/ruta/del/log/nombre_archivo_`date +%Y%m%d_%H%M`.log
jar=/ruta/del/jar/Archivo.jar
/opt/java1.5/bin/java -classpath $jar com.paquete.EjecutaClaseConMain > $logeo
gzip $logeo
mv $logeo.gz /ruta/del/log/comprimido
Это это подняло с crontab регистрируя полный маршрут в archivo.sh , и когда crontab он поднимает sh, работает jar. У jar есть while, который способствует тому, чтобы он не умер до некоего часа ночи. Когда crontab поднимает sh, также производит log и пишет в с system.out.println пока jar был жив. Этот log могут наблюдать с tail-f archivo.sh . В конце дня, когда jar умирает ввиду часа, log сжимается и хранится в папке. В следующий день crontab вновь делает тот же цикл.
Я Думаю, что это противоположность, во что ты хочешь сделать, но чувствую, что он может подавать тебя.