Как я могу запустить файл .JAR передавая динамические аргументы, используя контроллер RESTFUL (Spring Framework) - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть два проекта, первый - это проект maven, разработанный с использованием Spring Framework (версия 4), и он содержит веб-сервисы Restful, которые используются для связи с внешним приложением (разработка с Angular 4), а другой - является проектом начальной загрузки, относящимся к пакетной обработке для задач планирования, и он был выполнен с использованием подхода пакетной пружины.

Идея состоит в том, чтобы использовать веб-сервис в первом проекте, который будет выполнять функцию запуска файла Jar, сгенерированного из проекта spring-batch, с возможностью передачи динамических аргументов.

ДИНАМИЧЕСКИЕ АРГУМЕНТЫ для моего проекта это CronExpression, этот вход (аргумент) должен быть динамическим.

Я уже использовал RunTime.exec ("java", "-jar", "MyFile.jar", "Arg1"), но он не работает. Поэтому после поиска я нашел другой путь, используя proccessBuilder, и он работает нормально, но только для статического аргумента.

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

Я хотел бы предложить мне лучший способ сделать это.

Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2018

Вы можете получить параметры из контроллера остальных и использовать их для запуска задания, используя ProcessBuilder API. Вот пример:

import org.springframework.batch.core.launch.JobOperator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class JobLaunchingController {

    @RequestMapping(value = "/", method = RequestMethod.POST)
    @ResponseStatus(HttpStatus.ACCEPTED)
    public void launch(@RequestParam("name") String name) throws Exception {
        ProcessBuilder processBuilder = new ProcessBuilder();
        processBuilder.command("java", "-jar", "myjob.jar", "name=" + name);
        processBuilder.start();
    }
}

Надеюсь, это поможет.

...