1. 程式人生 > >Spring Batch 簡單應用 (一)(Hello World)

Spring Batch 簡單應用 (一)(Hello World)

文件配置 let reader launcher -m 技術分享 exe resource trace

通過前面兩篇關於Spring Batch文章的介紹,大家應該已經對Spring Batch有個初步的概念了。這篇文章,將通過一個”Hello World!”實例,和大家一起探討關於Spring Batch的一些基本配置和實現。使大家從開發的角度對Spring Batch有一個真切的體會。

說明:1,本實例使用的是spring-batch 2.1.8

2,本實例沒有像前面講的那樣配置ItemReader、ItemProcessor和ItemWriter,而是之間在Step中調用Tasklet,由Tasklet完成”Hello World!”的輸出。

工程結構如下圖:

技術分享

JobLaunch.java類用來啟動Bath,writeTasklet.java用來完成輸出工作。application.xml用來配置一些Spring信息,batch.xml配置Job信息。

application.xml文件配置如下:

技術分享
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"

xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-autowire="byName">

<bean id="jobLauncher"class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository"/>
</bean>

<bean id="jobRepository"class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
</bean>

<bean id="transactionManager"
class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"/>
</beans>
技術分享


jobLauncher負責batch的啟動工作,jobRepository負責job的整個運行過程中的CRUD操作,transactionManager負責事務的管理操作。

batch.xml文件配置如下:

技術分享
<?xml version="1.0" encoding="UTF-8"?>
<bean:beans xmlns="http://www.springframework.org/schema/batch"
xmlns:bean="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/batch
http://www.springframework.org/schema/batch/spring-batch-2.1.xsd">

<bean:import resource="applicationContext.xml"/>

<job id="helloWorldJob">
<step id="step_hello" next="step_world">
<tasklet ref="hello" transaction-manager="transactionManager"></tasklet>
</step>
<step id="step_world">
<tasklet ref="world" transaction-manager="transactionManager"></tasklet>
</step>
</job>

<bean:bean id="hello" class="com.wanggc.springbatch.sample.helloworld.writeTasklet">
<bean:property name="message" value="Hello "></bean:property>
</bean:bean>

<bean:bean id="world" class="com.wanggc.springbatch.sample.helloworld.writeTasklet">
<bean:property name="message" value=" World!"></bean:property>
</bean:bean>
</bean:beans>
技術分享

配置了一個ID為helloWorldJob的job,此job有兩個Step : step_hello和step_world,前者負責輸出“Hello ”,後者負責輸出“World!”,當第一個Step完成以後,執行第二個Step。

writeTasklet類的代碼如下:

技術分享
public class writeTasklet implements Tasklet {

/** Message */
private String message;

/**
* @param message
* the message to set
*/
public void setMessage(String message) {
this.message = message;
}

@Override
public RepeatStatus execute(StepContribution arg0, ChunkContext arg1)
throws Exception {
System.out.println(message);
return RepeatStatus.FINISHED;
}

}
技術分享

此類中定義了一個message屬性,通過batch.xml的“hello”和“world” Bean為其註入值。 execute方法,是由Tasklet接口繼承而來的,是Tasklet實現業務邏輯的地方。此實例中只是簡單的輸出Message信息後,直接返回。

啟動類JobLaunch類的代碼如下:

技術分享
public class JobLaunch {

/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"batch.xml");
JobLauncher launcher = (JobLauncher) context.getBean("jobLauncher");
Job job = (Job) context.getBean("helloWorldJob");

try {
/* 運行Job */
JobExecution result = launcher.run(job, new JobParameters());
/* 處理結束,控制臺打印處理結果 */
System.out.println(result.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
技術分享

Spring Batch 簡單應用 (一)(Hello World)