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

mkyong

Founder of Mkyong.com, passionate Java and open-source technologies. If you enjoy my tutorials, consider making a donation to these charities.

9 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Matt Kindzerske
12 years ago

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
11 years ago

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
11 years ago
Reply to  peng li

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

Mike Dev
7 years ago

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
10 years ago

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

PA
10 years ago

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
11 years ago

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
12 years ago

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

SrinivasaRao Gurram
12 years ago

Hi yong,
I am unable to run the batch using command line. Need your help. Let me know convenient time to reach you.
[email protected]/[email protected]/+91 9989764000