Вызов Spring Batch из кода Java

Ниже приведены мои требования.

  1. Существует экран, на котором пользователь вводит имя файла и нажимает кнопку «Отправить».

  2. При нажатии кнопки submit должно быть запущено пакетное задание spring. Пакетное задание считывает файл и заполняет базу данных.

Как мы вызываем пакетное задание Spring из кода Java (в частности, из кода класса действий Struts)?

Кроме того, мне нужно передать имя файла (которое пользователь ввел на экране) в пакетную программу. Как мы этого достигаем?


person user2434    schedule 22.02.2012    source источник


Ответы (2)


JobLauncher

Задания Spring Batch запускаются (например, run) через JobLauncher. Одна из реализаций лаунчера предоставляется фреймворком, который вы можете использовать нестандартно: SimpleJobLauncher. Взгляните на Настройка JobLauncher раздел документов


Запуск заданий из веб-контейнера

Хотя в большинстве случаев пакетные задания запускаются из командной строки (по расписанию или нет), есть несколько способов сделать это из Интернета. Взгляните на Запуск заданий из веб-контейнера раздел документов Spring Batch.

Идея проста. Вы просто вызываете jobLauncher.run из контроллера:

@Controller
public class JobLauncherController {

    @Autowired
    JobLauncher jobLauncher;

    @Autowired
    Job job;

    @RequestMapping("/jobLauncher.html")
    public void handle() throws Exception{
        jobLauncher.run(job, new JobParameters());
    }
}

Это Spring MVC (не Struts), но вы можете видеть, что он очень прост и будет работать для любого класса контроллера/действия:

  • jobLauncher и job вводятся => setJobLauncher(...) / setJob(...)
  • jobLauncher запускает задание с jobLauncher.html страницы (примечание: вызов run не блокируется)

Весенний пакетный администратор

Еще один способ запуска заданий Spring Batch, не беспокоясь о Spring MVC и Struts, — использовать Spring Batch Admin, который предназначен для решения именно этой проблемы и многого другого (мониторинг/остановка/и т.д..)

person tolitius    schedule 22.02.2012
comment
Не забудьте добавить «имя файла» в JobParameters, чтобы сделать экземпляр задания уникальным. - person Trever Shick; 26.02.2012

Классы действий Struts являются обычными классами, и вы можете написать любой код, который вы хотите написать внутри этого. S2 по умолчанию будет вызывать метод execute в вашем классе действий до тех пор, пока вы не укажете какое-либо другое имя метода в вашем файле конфигурации. все, что вам нужно, чтобы сделать следующие шаги

  1. Создайте класс действий с методом выполнения.
  2. Создайте класс обслуживания с методом, который имеет вашу логику пакетной обработки.
  3. Вызов класса обслуживания из класса действий

Для отправки значения имени файла из вашего jsp все, что вам нужно, это создать поле ввода, например

<s:textfield name="fileName" id="fileName"/>

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

public class BatchProcessingAction extends ActionSupport{

    private string fileName;
    private ServiceClass serviceClass;

    getter ans setter for above defined properties

    public string execute() throw Exeption{
            serviceclass=new ServiceClass();  // can use Di or factory for this
            serviceClass.executeBatchProcessing(fileName);
            return SUCCESS;
    }

}
person Umesh Awasthi    schedule 22.02.2012
comment
Это на самом деле не объясняет весеннюю сторону вещей для этого пользователя (ответ № 1 объясняет), но это действительно отвечает на вторую часть его вопроса. - person Trever Shick; 26.02.2012
comment
@TreverShick: я согласен с вами. мой ответ был больше о части s2 :) - person Umesh Awasthi; 26.02.2012