2011-05-10 16 views
13

Tengo una aplicación Spring Batch, que empiezo con CommandLineJobRunner. Pero ahora tengo que incorporar esta aplicación a nuestro entorno corporativo. Allí tenemos una aplicación Launcher propia que tengo que usar. Para esta aplicación de iniciador, necesito una clase de inicio con un método principal que se llamará al inicio y en el que tendría que iniciar Spring Batch.Ejecutar Spring Batch Job programmatically?

¿Es la única forma de asignar manualmente un JobLauncher y ejecutar el trabajo con este iniciador o hay una clase en Spring Batch que respaldaría eso (o alguien sabe una muestra)?

Respuesta

11

Sí, puede iniciar su trabajo mediante programación. Si ve in the source de CommandLineJobRunner, el método principal solo crea un contexto Spring y usa el iniciador para ejecutar el trabajo. Entonces puedes hacer esto en tu nueva aplicación.

6

Usando una aplicación de inicio de primavera si no desea utilizar el CommandLineRunner (por alguna razón o si necesita alguna lógica personalizada), siempre se puede hacer algo como:

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(); 
} 
+0

Intenté con este enfoque, pero de alguna manera el contexto no pudo encontrar el bean de "su trabajo aquí" a pesar del hecho de que puedo ver que Bean fue inicializado por Spring container :(. ¿Alguna idea de por qué? – Vishal