Выполнить программный пакет Spring пакетной работы?
У меня есть пакетное приложение Spring, которое я начинаю с CommandLineJobRunner
. Но теперь я должен внедрить это приложение в нашу корпоративную среду. Там у нас есть собственное приложение Launcher, которое я должен использовать. Для этого приложения запуска требуется класс запуска с основным методом, который будет вызываться при запуске и где мне придется запускать Spring Batch.
Является единственным способом вручную назначить JobLauncher
и запустить задание с помощью этой панели запуска или есть класс в Spring Batch, который будет поддерживать это (или кто-нибудь знает образец)?
Ответы
Ответ 1
Да, вы можете запускать свою работу программно. Если вы видите в источнике CommandLineJobRunner
, основной метод просто создайте контекст Spring и воспользуйтесь программой запуска, чтобы запустить задание. Таким образом, вы можете сделать это в своем новом приложении.
Ответ 2
JobLauncher может использоваться для вызова программы Jobatically. JobLauncher может быть автообновлен в вашем Servlet/Controller, если вы ищете способ запуска заданий из webapp:
http://docs.spring.io/spring-batch/reference/htmlsingle/#runningJobsFromWebContainer
Ответ 3
Используя приложение загрузки Spring, если вы не хотите использовать CommandLineRunner (по какой-либо причине или если вам нужна какая-то пользовательская логика), вы всегда можете сделать что-то вроде:
public static void main(String[] args) {
SpringApplication app = new SpringApplication(YourApplication.class);
app.setWebEnvironment(false);
ConfigurableApplicationContext ctx = app.run(args);
JobLauncher jobLauncher = ctx.getBean(JobLauncher.class);
Job job = ctx.getBean("your-job-here", Job.class);
JobParameters jobParameters = new JobParametersBuilder().toJobParameters();
JobExecution jobExecution = jobLauncher.run(job, jobParameters);
BatchStatus batchStatus = jobExecution.getStatus();
}