Run Spring batch job with CommandLineJobRunner

A quick guide to show you how to run a Spring batch job with CommandLineJobRunner.

1. Spring Batch Job Example

A simple job.

resources/spring/batch/jobs/job-read-files.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans ...
   <import resource="../config/context.xml"/>
  
   <job id="readJob" xmlns="http://www.springframework.org/schema/batch">
      <step id="step1">
	<tasklet>
		<chunk reader="flatFileItemReader" 
                          writer="flatFileItemWriter" commit-interval="1" />
	</tasklet>
      </step>
   </job>

	<!-- ... -->
</beans>

2. Package Project

Use Maven to package your project into a single jar file – target/your-project.jar, and copy all the dependencies into target/dependency-jars/.

pom.xml

  <!-- ... -->
  <plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-dependency-plugin</artifactId>
	<version>2.5.1</version>
	<executions>
	  <execution>
		<id>copy-dependencies</id>
		<phase>package</phase>
		<goals>
			<goal>copy-dependencies</goal>
		</goals>
		<configuration>
			<outputDirectory>
				${project.build.directory}/dependency-jars/
			</outputDirectory>
		</configuration>
	  </execution>
	</executions>
  </plugin>

$ mvn package

3. CommandLineJobRunner example

Usage :


CommandLineJobRunner jobPath <options> jobIdentifier (jobParameters)

To run above spring batch job, type following command :


$ java -cp "target/dependency-jars/*:target/your-project.jar" org.springframework.batch.core.launch.support.CommandLineJobRunner spring/batch/jobs/job-read-files.xml readJob

For jobParameters, append to the end of the command :


$ java -cp "target/dependency-jars/*:target/your-project.jar" org.springframework.batch.core.launch.support.CommandLineJobRunner spring/batch/jobs/job-read-files.xml readJob file.name=testing.cvs

To run it on a schedule, normally, you can copy above commands into a .sh file, and run it with any scheduler commands, like cron in *nix. Refer to this example – Add Jobs To cron Under Linux.

P.S When batch job is running under system scheduler, make sure it can locate your project’s classpath.

Download Source Code

Download it – SpringBatch-Run-Example.zip(12 KB)

References

  1. CommandLineJobRunner JavaDoc
  2. How To Create A Jar File With Maven
  3. Spring Batch Hello World – In Memory

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

avatar
7 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
7 Comment authors
Mike DevRKPApeng liEric Recent comment authors
newest oldest most voted
Mike Dev
Guest
Mike Dev

Hello I have a project in sprign batch, but for architectural reasons I need to use a JDNI, the jobs I want to start with commands generating a Jar, I have been looking but I can not find something that could be of help, any ideas?
Thanks for the space

RK
Guest
RK

Do you have any video tutorials on spring batches and schedulers?

PA
Guest
PA

How we can schedule a cron job through command line ? How can I run same project once and same project in every 5 mins, by giving flags at command line ?

peng li
Guest
peng li

Another way to run batch job, is that we write the running code in a App.java class. We compile it. And we use java -cp to call the App.class.

Eric
Guest
Eric

Matt Kindzerske , you´re completly right, thanks helps alot!

Matt Kindzerske
Guest
Matt Kindzerske

This example is good, but there are many errors with your downloadable source:

pom is describing different finalName than your commandline usage is expecting

Commandline usage is using : to seperate classpath instead of ;

Commandline usage is using the wrong id for the batch job.

Here is correct command line

java -cp “target/dependency-jars/*;target/spring-batch.jar” org.springframework.batch.core.launch.support.CommandLineJobRunner spring/batch/jobs/job-read-files.xml readMultiFileJob

peng li
Guest
peng li

Matt,

Your correction for the command helped me a lot. Thank you very much!! Besides, mkyong still presented a really good example! Now, I’m fighting for how to run it by Spring Batch Admin!

peng li
Guest
peng li

I just figured it out ‘;’ is for linux, ‘:’ is for windows

SrinivasaRao Gurram
Guest
SrinivasaRao Gurram

Hi yong,
I am unable to run the batch using command line. Need your help. Let me know convenient time to reach you.
SrinivasaRao.Gurram@gmail.com/srinivasarao.gurram@cognizant.com/+91 9989764000