2015년 9월 26일 토요일

[Spring] 스프링 배치(Spring Batch)


스프링 배치(Spring Batch)







활용예제



pom.xml



<project xmlns="http://maven.apache.org/POM/4.0.0" 
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                                                http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.samples</groupId>
<artifactId>SpringBatch</artifactId>
<version>0.0.1-SNAPSHOT</version>

<properties>
              <spring.framework.version>3.1.2.RELEASE</spring.framework.version>
              <spring.batch.version>2.2.0.RELEASE</spring.batch.version>
</properties>

<dependencies>
              <dependency>
                            <groupId>org.springframework.batch</groupId>
                            <artifactId>spring-batch-core</artifactId>
                            <version>${spring.batch.version}</version>
              </dependency>
              <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-aop</artifactId>
                            <version>${spring.framework.version}</version>
              </dependency>
              <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-tx</artifactId>
                            <version>${spring.framework.version}</version>
              </dependency>
              <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-core</artifactId>
                            <version>${spring.framework.version}</version>
              </dependency>
              <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-beans</artifactId>
                            <version>${spring.framework.version}</version>
              </dependency>
              <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-context</artifactId>
                            <version>${spring.framework.version}</version>
              </dependency>
</dependencies>



</project>


---------------------------------------------------------------------------------------------



PrintJob1.class



// ref http://www.jroller.com/0xcafebabe/entry/spring_batch_hello_world_1

public class PrintJob1 implements Tasklet {

             private String message;

             // 메시지 설정을 위한 setter
             public void setMessage(String message) {
                          this.message = message;
             }

             public RepeatStatus execute(StepContribution arg0, ChunkContext arg1)
                                                               throws Exception {

                          System.out.println("############### JOB 1 ###############");

                          // 타입스탬프 출력
                          DateFormat dateFormat = new SimpleDateFormat
                                                                                           ("yyyy/MM/dd HH:mm:ss");
                          Date date = new Date();
                          System.out.println(dateFormat.format(date));

                          // 메시지 출력
                          System.out.println(message);

                          System.out.println("############### END 1 ###############");

                          return RepeatStatus.FINISHED;
             }
}


---------------------------------------------------------------------------------------------



PrintJob2.class



 - PrintJob1.class 와 동일함


---------------------------------------------------------------------------------------------

PrintJob3.class



 - PrintJob1.class 와 동일함


---------------------------------------------------------------------------------------------


applicationContext.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:aop="http://www.springframework.org/schema/aop"
             xmlns:tx="http://www.springframework.org/schema/tx"           
             xmlns:batch="http://www.springframework.org/schema/batch"
             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.1.xsd
                    http://www.springframework.org/schema/tx
                    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
                    http://www.springframework.org/schema/aop
                    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
                    http://www.springframework.org/schema/batch
                    http://www.springframework.org/schema/batch/spring-batch-2.2.xsd
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context-3.1.xsd">

<!-- Job Launcher 설정 -->
<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
             <property name="jobRepository" ref="jobRepository" />
</bean>

<!-- Job Repository 설정 -->
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
             <property name="transactionManager" ref="transactionManager" />
</bean>

<!-- Transasction Manager 설정 -->
<bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager">
</bean>

<!-- 배치 작업 설정 -->
<bean id="helloJob1" class="com.teachd.myapp.PrintJob1">
             <property name="message" value="!!!!! Hello !!!!!" />
</bean>
<bean id="helloJob2" class="com.teachd.myapp.PrintJob2">
             <property name="message" value="!!!!! Spring !!!!!" />
</bean>
<bean id="helloJob3" class="com.teachd.myapp.PrintJob3">
             <property name="message" value="!!!!! Batch !!!!!" />
</bean>

<!-- 스케줄링 설정 -->
<batch:job id="myJob">
             <batch:step id="step1" next="step2">
                          <batch:tasklet ref="helloJob1" />
             </batch:step>
             <batch:step id="step2" next="step3">
                          <batch:tasklet ref="helloJob2" />
             </batch:step>
             <batch:step id="step3">
                          <batch:tasklet ref="helloJob3" />
             </batch:step>
</batch:job>



</beans>


---------------------------------------------------------------------------------------------







터미널에서 실행하기



mvn package exec:
java "-Dexec.mainClass=
org.springframework.batch.core.launch.support.CommandLineJobRunner" 
        "-Dexec.args=applicationContext.xml myJob"





소스파일


https://github.com/Yongdae-Kim/spring_study/tree/master/SpringBatch






참고



조대협의 블로그 :: Spring Batch 개념 정리




댓글 없음:

댓글 쓰기