SPRING
2017.05.30 / 18:57

'Spring Batch'¿¡ ÇØ´çµÇ´Â ±Û 3°Ç

Secutiry
Ãßõ ¼ö 231

[½ºÇÁ¸µ ¹èÄ¡ 2.0] °ÉÀ½¸¶ ¶¼±â

Spring Batch/etc : 2009.08.21 00:26


1. ¶óÀ̺귯¸® Ãß°¡.

pom.xml¿¡ ½ºÇÁ¸µ ¹øµé ÀúÀå¼Ò¿¡¼­ Á¦°øÇÏ´Â ½ºÇÁ¸µ ¹èÄ¡ °¡Àå ÃֽŠ¹öÀüÀ» Ãß°¡ÇØÁÝ´Ï´Ù

ÇÁ·ÎÁ§Æ®°¡ ¼¼ °³·Î ³ª´²Á® ÀÖ´õ±º¿ä. test ¸ðµâÀº Å×½ºÆ® ¿ëÀ̴ϱî test scopeÀ¸·Î ¼³Á¤ÇÏ´Â °ÍÀÌ ÁÁ°Ú³×¿ä. 

<dependency> 
<groupId>org.springframework.batch</groupId> 
<artifactId>org.springframework.batch.core</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework.batch</groupId> <artifactId>org.springframework.batch.infrastructure</artifactId> <version>2.0.2.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework.batch</groupId> <artifactId>org.springframework.batch.test</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>

2. ¹èÄ¡¸¦ Job¿Í StepÀ¸·Î Ç¥ÇöÇÕ´Ï´Ù.

ÇϳªÀÇ JobÀÌ ÇϳªÀÇ ¹èÄ¡ ÀÛ¾÷À̶ó°í »ý°¢ÇÏ¸é µÉ µí ÇÏ°í, ¹èÄ¡ ÀÛ¾÷ÀÇ ¼¼¼¼ÇÑ ´Ü°èµéÀ» ¿©·¯ °³ÀÇ StepÀ¸·Î Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇϳªÀÇ StepÀº ItemReader, ItemProcessor, ItemWriter¸¦ °¢°¢ °¡Áú ¼ö Àִµ¥, ÀÌ °Íµé ´Ù ÇÊ¿ä ¾øÀÌ TaskletÀ» ±¸ÇöÇؼ­ ÅëÂ¥·Î StepÀ» ±¸ÇöÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ±×·¯³ª Àú´Â ÃÖ´ëÇÑ IR, IP, IW ±¸Á¶¸¦ ÀÌ¿ëÇØ º¸·Á°í ÇÑ ¹ø ½áºÃ½À´Ï´Ù.

ÇÒ ÀÏÀº DB¿¡¼­ ƯÁ¤ µ¥ÀÌÅ͵éÀ» Àоî¿Í¼­ À̸ÞÀÏ·Î »Ñ·ÁÁÖ°í, ¹èÄ¡°¡ ³¡³ª¸é ±× °á°ú¸¦ ·Î±ëÇÒ °Í.

2-1. XML ½ºÅ°¸¶ ¼³Á¤.

batch ³×ÀÓ½ºÆäÀ̽º¸¦ ±âº» ³×ÀÓ½ºÆäÀ̽º·Î ¼³Á¤ÇÑ XML ½ºÅ°¸¶¸¦ »ç¿ëÇÕ´Ï´Ù.

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

// ¿©±â¿¡ job ¼³Á¤.

</beans:beans>

job Çϳª ´ç ÇϳªÀÇ XML ¼³Á¤ ÆÄÀÏ·Î ¸¸µå´Â°É ±âº»À¸·Î ÇÏ°í, °øÅëÀ¸·Î ¾µ ³à¼®µéÀº º°µµÀÇ XML·Î »« ´ÙÀ½ °¢°¢ÀÇ job XML¿¡¼­ import Çؼ­ ¾²´Â °ÍÀÌ ÁÁÀ» µí ÇÕ´Ï´Ù.

2-2. Job ¼³Á¤.

º»°ÝÀûÀ¸·Î jobÀ» ¼³Á¤ ÆÄÀÏ·Î ¸¸µé¾î¾ß ÇÕ´Ï´Ù. ¹èÄ¡ 2.0¿¡¼­´Â °³º° ¾ÆÀÌÅÛµéÀÌ ¾Æ´Ï¶ó ¾ÆÀÌÅÛ ¹¶ÅÊÀÌ(chunk) ´ÜÀ§·Î ¹èÄ¡ ÀÛ¾÷À» ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    <job id="itemCouningJob" job-repository="jobRepository">
        <step id="itemCouningStep">
            <tasklet>
                <chunk reader="komaItemReader" writer="emailWriter"
                    commit-interval="100" />
                <listeners>
                    <listener ref="stepResultListener" />
                </listeners>
            </tasklet>
        </step>
        <listeners>
            <listener ref="jobResultListener"/>
        </listeners>
    </job>

ÀÌ°Ô ³¡ÀÔ´Ï´Ù. ÇϳªÀÇ job ³»ºÎ¿¡. ÇϳªÀÇ stepÀÌ ÀÖ°í, ÇϳªÀÇ listerner(jobResultListener)¸¦ µî·ÏÇØ µ×½À´Ï´Ù. job ³»ºÎ¿¡ ¿©·¯ °³ÀÇ stepÀ» ¼³Á¤ÇÒ ¼ö ÀÖ°í, ¿©·¯ °³ÀÇ ¸®½º³Êµµ µî·ÏÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÇϳªÀÇ step ¿¡´Â ¸®´õ, ÇÁ·Î¼¼¼­, ¶óÀÌÅ͸¦ µî·ÏÇÒ ¼ö Àִµ¥, Á¦°¡ °³³ä Àâ±â Èûµé¾ú´ø ºÎºÐÀº ÇϳªÀÇ itemÀ» Àоî¿Í¼­ ó¸®ÇÏ°í ¹Ù·Î ¾´´Ù°í??? ¿´½À´Ï´Ù. ±×·¯³ª ±×°Ô ¾Æ´Ï´õ±º¿ä. ¹¶ÅÊÀÌ´ø °³º° ItemÀÌ´ø Àоî¿Â ´ÙÀ½ °³º°ÀûÀ¸·Î 󸮸¦ ÇÏ´Â °Í ±îÁø ¸Â´Âµ¥, ±×°ÍµéÀ» Çϳª Çϳª ¶óÀÌÅÍ°¡ ó¸®ÇÏ´Â°Ô ¾Æ´Ï¶ó, ¸ðµç ÇÁ·Î¼¼½ÌÀÌ ³¡³­ ¾ÆÀÌÅÛ Àüü ¸ñ·ÏÀ» ¶óÀÌÅÍ°¡ ¹Þ¾Æ¼­ ÀÛ¾÷ ÇÕ´Ï´Ù.

µû¶ó¼­, Á¦°¡ ÇÒ ÀÏÀ̾ú´ø ¸ðµç ¾ÆÀÌÅÛ ¸ñ·ÏÀ» Àоî¿À´Â °ÍÀº ¸®´õ¿¡°Ô ¸Ã±â¸é µÇ°í, º°µµÀÇ ÇÁ·Î¼¼½Ì ÀÛ¾÷ÀÌ ÇÊ¿ä ¾ø´Â µí ÇÏ´Ï ÇÁ·Î¼¼¼­´Â ¼³Á¤ÇÏÁö ¾Ê°í, ¸ðµç ¸ñ·ÏÀ» Àоî¿Â µÚ À̸ÞÀÏ·Î º¸³»¾ß Çϴϱî emailWriter¶ó´Â °É Çϳª µî·ÏÇß½À´Ï´Ù.

±×¸®°í Step¿¡µµ ¸®½º³Ê Çϳª¸¦ µî·ÏÇØ µÎ¾ú½À´Ï´Ù. ÀÌ ³à¼®Àº Job¿¡ µî·ÏÇÑ °Í°ú´Â ´Þ¸® ÇÑ StepÀÇ °á°ú, À̸§, ½ÃÀÛ ½Ã°£, ³¡³­ ½Ã°£, ¼öÇà ½Ã°£ µîÀ» ¾Ë ¼ö ÀÖ´Â ¿©±äÇÑ ³à¼®ÀÔ´Ï´Ù.; Job¿¡ µî·ÏÇÑ ¸®½º³Ê´Â ¸ðµç Step..Áï Job¿¡ ´ëÇÑ ³»¿ëÀ» ¾Ë ¼ö ÀÖÁö¿ä.

¸¸¾à, Á¤ÀÇÇØ¾ß ÇÏ´Â ÀÛ¾÷ÀÌ stepÀÇ ¸®´õ, ÇÁ·Î¼¼¼­, ¶óÀÌÅÍ °³³ä°ú Àß ¸ÂÁö ¾Ê´Ù¸é..  Tasklet ÀÚü¸¦ ±¸ÇöÇÑ ´ÙÀ½ <tasklet ref=""/> ¿¡ µî·ÏÇØÁÖ¸é µË´Ï´Ù.

2-3. Job ¿¡¼­ ÇÊ¿äÇÑ ºó Á¤ÀÇ ¹× ¼³Á¤.

ÀÌÁ¦ À§¿¡¼­ ¼³Á¤ÇÑ job¿¡ ÇÊ¿äÇÑ ºóµéÀ» µî·ÏÇÕ´Ï´Ù. ¿ì¼± ¸®ÆÄÁöÅ丮¸¦ µî·ÏÇÕ´Ï´Ù.

    <job-repository id="jobRepository" data-source="dataSource"
        transaction-manager="transactionManager" isolation-level-for-create="SERIALIZABLE"
        table-prefix="BATCH_" />

·¹ÆÛ·±½º¿¡ ÀÖ´Â °ÍÀ» ±×´ë·Î ½è½À´Ï´Ù. ½ÇÁ¦ DB¸¦ ÀÌ¿ëÇϵµ·Ï Çß½À´Ï´Ù. ´ÙÀ½Àº ¸®´õ ÀÔ´Ï´Ù.

    <beans:bean id="komaItemReader"
        class="org.springframework.batch.item.database.HibernateCursorItemReader"
        p:queryString="from Item" p:sessionFactory-ref="sessionFactory" />

ÇÏÀ̹ö³×ÀÌÆ® Ä¿¼­ ¾ÆÀÌÅÛ ¸®´õ·Î.. ½ºÇÁ¸µ ¹èÄ¡¿¡¼­ ±âº»À¸·Î Á¦°øÇØÁִ Ŭ·¡½ºÀÔ´Ï´Ù. HQL°ú ¼¼¼Ç ÆÑÅ丮¸¸ ¼³Á¤ÇÏ¸é µË´Ï´Ù. ´ÙÀ½Àº ¶óÀÌÅÍ ÀÔ´Ï´Ù. ÀÌ ³à¼®Àº º°µµ·Î ±¸ÇöÇØ ÁÖ¾ú½À´Ï´Ù.

    <beans:bean id="emailWriter" class="sandbox.batch.writer.EmailWriter"/>

public class EmailWriter implements ItemWriter {

    @Override
    public void write(List items) throws Exception {
        sendEmail(items);
    }

    private void sendEmail(List items) {
        System.out.println("Mailing : " + items);
    }

}

±¸ÇöÀ̶ó°í ÇغÃÀÚ.. ±×³É Àú·¸°Ô Á» ÇãÁ¢ÇÏ°Ô Çص׽À´Ï´Ù. ÁÖ¿ä °ü½É»ç´Â ¾Æ´Ï±â ¶§¹®¿¡ Àú·¸°Ô Çß½À´Ï´Ù. ¸¶Áö¸·À¸·Î ¸®½º³Ê µÎ°³¸¦ ±¸ÇöÇϴµ¥ ÀÌ ³à¼®µéÀº ¹¹ °£´ÜÇϴϱî ÆнºÇÏÁÒ.

3. ¹èÄ¡ ½ÇÇàÇϱâ.

¹èÄ¡ ½ÇÇàÀº JobLauncher¸¦ »ç¿ëÇϴµ¥ ÀÌ ³à¼®Àº jobRepository¸¦ ÇÊ¿ä·Î ÇÕ´Ï´Ù. µû¶ó¼­ ÀÌ ³à¼®µµ ½ºÇÁ¸µ DI¸¦ »ç¿ëÇϵµ·Ï ºóÀ¸·Î µî·ÏÇØ ÁÝ´Ï´Ù.

    <beans:bean id="jobLauncher"
        class="org.springframework.batch.core.launch.support.SimpleJobLauncher" p:jobRepository-ref="jobRepository" />

ÀÚ ÀÌÁ¦ µåµð¾î ÀÚ¹Ù ÄÚµå·Î JobÀ» ½ÇÇàÇØ ÁÝ´Ï´Ù.

jobLauncher.run(job, new JobParameters());

jobLauncher ÀÌ ³à¼®À» applicationContext¿¡¼­ DLÀ» ÇÏ°Ç, AutowiringÀ¸·Î °¡Á®¿À°Ç ÇÏ°í, jobµµ 2¹ø ÀÛ¾÷¿¡¼­ µî·ÏÇÑ ³à¼®À» °¡Á®¿É´Ï´Ù. ±×¸®°í JobParameter °´Ã¼¸¦ ³Ñ°ÜÁÖ¸é ½ÇÇàÀÌ ¾È µÉ °Ì´Ï´Ù.

Å×À̺íÀÌ ¾ø´Ù´Â ¿¡·¯°¡ ³ª¿ÀÁÒ. ´ÙÀ½ ½ºÅ°¸¶ ÆÄÀÏ Áß¿¡ »ç¿ë ÁßÀÎ DB¿¡ ¸Â´Â ³à¼®À» °ñ¶ó¼­ Å×À̺íÀ» ¸¸µé¾î ÁØ ´ÙÀ½¿¡ ½ÇÇàÇØ º¾´Ï´Ù. ±×·³ µ¹¾Æ°¥ °Ì´Ï´Ù.


4. ¾ÕÀ¸·Î ÇÒ ÀÏ

JobParameter°¡ ÀÌÀü¿¡ »ç¿ëÇÑ °Í°ú °°´Ù¸é ¹èÄ¡´Â ´Ù½Ã µ¹Áö ¾Ê½À´Ï´Ù. JobParameter¸¦ ´Ù¸¥ Á¤º¸¸¦ °¡Áöµµ·Ï ¸Å¹ø »õ·Î ¸¸µé¾î Áà¾ß Çϴµ¥, ±× ºÎºÐÀ» Á» »ìÆìºÁ¾ß°Ú½À´Ï´Ù. Incrementer¶ó´Â °Í°ú °ü·ÃÀÌ ÀÖ¾î º¸ÀÌ´øµ¥ ¸Å¹ø ½ÇÇàÇÒ ¶§¸¶´Ù ÀÚµ¿À¸·Î °ãÄ¡Áö ¾Ê´Â JobParameter¸¦ ¸¸µé¾î ÁÖ´Â°Ô ÀÖÀ» ¹ýµµ Çѵ¥ ¸»ÀÌÁÒ.

¹èÄ¡ Å×½ºÆ®¿¡ ´ëÇÏ ¾Ë¾ÆºÁ¾ß°Ú½À´Ï´Ù. ¾î¶»°Ô Å×½ºÆ® ÇÒ ¼ö ÀÖ´ÂÁö. ½ºÇÁ¸µ ¹èÄ¡°¡ Á¦°øÇØÁÖ´Â Å×½ºÆ® ¹æ¹ýÀº ¾î¶² °ÍÀÎÁö.

ÇÏÀ̹ö³×ÀÌÆ®¿Í ½ºÇÁ¸µ ¹èÄ¡ ±âº» Å×ÀÌºí ½ºÅ°¸¶¸¦ ¸ÊÇÎÇØÁÙ ÀÚ¹Ùºó °´Ã¼µéÀº ¾ø´ÂÁö »ìÆìºÁ¾ß°Ú½À´Ï´Ù. À̰͵µ ¾îµò°¡ ÀÖÀ» ¹ýµµ Çѵ¥ ¸»ÀÌÁÒ. Å×ÀÌºí º¸°í¼­ Á÷Á¢ ÀÚ¹Ùºó ¸¸µé¾î¼­ ¸ÊÇÎ ÇØÁÖ±â´Â Á» ±ÍÂúÀÚ³ª¿ä. ´©±º°¡ Çسù°Å³ª.. ÇÏÀ̹ö³×ÀÌÆ® Åø·Î ½ºÅ°¸¶¿¡¼­ ÀÚ¹ÙºóÀ» ¸¸µé°í ¸ÊÇεµ ÇØÁÖ´Â °É ã¾Æº¸´ø°¡ Çؾ߰ڽÀ´Ï´Ù. ÇÏÀ̹ö ¸ÊÇθ¸ ³¡³ª¸é.. ¹¹ ¹èÄ¡ Á¤º¸ °¡Á®¿Í¼­ È­¸é¿¡ »Ñ·ÁÁֱ⸸ ÇÏ¸é µÇ´Ï±ñ.. ½ÄÀ» Á× ¸Ô±â°Ú³×¿ä.

À½.. ±×¸®°í °£°£È÷ ·¹ÆÛ·±½º º¸¸é¼­ ÀÌ·Ð °øºÎµµ Á» Çؾ߰ڳ׿ä. ¿©·¯ ¿ë¾îµéÀ̶û °³³äµé ±âŸ ¼¼ºÎ ±â´Éµé¿¡´Â ¹¹°¡ ÀÖ´ÂÁö µîµîµî.
½Å°í

'Spring Batch > etc' Ä«Å×°í¸®ÀÇ ´Ù¸¥ ±Û

[½ºÇÁ¸µ ¹èÄ¡ 2.0] °ÉÀ½¸¶ ¶¼±â  (2)2009.08.21
top

ItemReader - Spring Batch Chapter 3



DB¿¡¼­´Â ´ÜÀÏ ·¹ÄÚµå, ¾ÖÇø®ÄÉÀ̼ǿ¡¼­´Â ´ÜÀÏ µµ¸ÞÀÎ °´Ã¼, ¹èÄ¡ ÀÛ¾÷¿¡¼­´Â Item. ÀÌ ³à¼®À» ÀоîµéÀÏ ¶§ »ç¿ëÇÏ´Â °ÍÀÌ ¹Ù·Î ItemReader.

public interface ItemReader {

  Object read() throws Exception;

  void mark() throws MarkFailedException;

  void reset() throws ResetFailedException;
}

¾ÆÁÖ ±ò²ûÇÑ ÀÎÅÍÆäÀ̽º read()´Â Àаí, mark()´Â Ç¥½ÃÇصΰí, reset()Àº ÃÖ±Ù¿¡ mark() µÈ °÷À¸·Î À̵¿. ¸¶Ä¡ Ã¥°¥ÇÇ°¡ ÀÖ´Â Iterator ´À³¦ÀÌ ³³´Ï´Ù.

±×¸®°í ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ ³à¼®ÀÌ DB³ª ÆÄÀϵ ¿¬°áÀÌ ÇÊ¿äÇÑ °æ¿ì ¹Ýµå½Ã °°ÀÌ ±¸ÇöÇÏ´Â ÀÎÅÍÆäÀ̽º°¡ Àִµ¥ ±×°Ç ¹Ù·Î ItemStream.

public interface ItemStream {

  void open(ExecutionContext executionContext) throws StreamException;

  void update(ExecutionContext executionContext);
  
  void close(ExecutionContext executionContext) throws StreamException;
}

ExecutionContext¸¦ »ç¿ëÇؼ­ óÀ½ À§Ä¡ºÎÅÍ ½ÃÀÛÇÏÁö ¾Ê°í ÀÌÀü¿¡ ¸ØÃè´ø °÷¿¡¼­ ´Ù½Ã ½ÃÀÛ ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÕ´Ï´Ù. open() Çؼ­ ¿¬°áÇÏ°í, update()´Â ExecutionContext¿¡¼­ ÇöÀç »óÅ Àоî¿É´Ï´Ù. µû¶ó¼­ Ä¿¹ÔÇϱâ Àü¿¡ update()¸¦ È£ÃâÇؼ­ ÇöÀç»óÅ°¡ DB¿¡ º¸Á¸µÇ°í ÀÖ´ÂÁö È®ÀÎÇÒ ¶§ »ç¿ëÇÏ°í, close()´Â openÀ¸·Î Àоî¿Â ÀÚ¿øµé ¹Ý³³ÇÕ´Ï´Ù. ÀÛ¾÷ ¸¶Ä£ ´ã¿¡ ²À È£ÃâÇØÁÖ´Â°Ô ÁÁ°Ú³×¿ä.

DB¿¡ ÀÖ´Â ItemÀ» Àоî¿Ã ¶§, ½ºÇÁ¸µÀÇ JdbcTemplate¿¡¼­´Â RowMapper¸¦ »ç¿ëÇؼ­ ¹ÝȯµÈ ResultSet¿¡ ÀÖ´Â µ¥ÀÌÅ͵éÀ» ¸ðµÎ. ¿Õâ. Çѹ濡. °´Ã¼·Î ¸ÊÇÎÇؼ­ ¹ÝȯÇØÁá½À´Ï´Ù. ÀÌ°Ô À̽´°¡ µÇ±âµµ ÇÕ´Ï´Ù. ¿Ö³Ä¸é, µ¥ÀÌÅÍ°¡ ³Ê¹« ¸¹À¸¸é ¸Þ¸ð¸®°¡ ¸ðÀÚ¶ó¼­ Á×°Ô µÉÅ״ϱî¿ä. ±×·±µ¥ ¹èÄ¡¿¡¼­µµ ¿ª½Ã RowMapper¸¦ »ç¿ëÇϴµ¥, ±×·± ÀÏÀÌ ¹ú¾îÁöÁö ¾Ê°Ô Çϱâ À§Çؼ­ µÎ °¡Áö ¹æ¹ýÀ» ¸¶·ÃÇß½À´Ï´Ù. Çϳª´Â Ä¿¼­Cursor, Çϳª´Â µå¶óÀ̺ùÄõ¸®DrivingQuery.

Cursor ½ºÅ¸ÀÏÀ̶õ?
¸ÊÇÎÀ» ÇÑ ¹ø¿¡ ÀüºÎ ÇÏ´Â°Ô ¾Æ´Ï¶ó, ÇÑ ¹ø¿¡ ÇÑ ÁÙ¾¿ ÇÕ´Ï´Ù. "½ºÆ®¸®¹Ö" ¹æ½ÄÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. À§¿¡¼­ »ìÆ캻 ItemReaderÀÇ next()¸¦ È£Ãâ ÇÒ ¶§¸¶´Ù ÇÑ ÁÙ(·¹ÄÚµå)¾¿ À̵¿ÇÕ´Ï´Ù.

  HibernateCursorItemReader itemReader = new HibernateCursorItemReader();
  itemReader.setQueryString("from CustomerCredit");
  //For simplicity sake, assume sessionFactory already obtained.
  itemReader.setSessionFactory(sessionFactory);
  itemReader.setUseStatelessSession(true);
  int counter = 0;
  ExecutionContext executionContext = new ExecutionContext();
  itemReader.open(executionContext);
  Object customerCredit = new Object();
  while(customerCredit != null){
    customerCredit = itemReader.read();
    counter++;
  }
  itemReader.close(executionContext);

itemReader.read()¸¦ ÇÒ ¶§¸¶´Ù RowMapper¸¦ Àû¿ëÇؼ­ °´Ã¼¸¦ ´øÁ®ÁÖ°í, ´ÙÀ½ ·¹ÄÚµå·Î ³Ñ¾î°©´Ï´Ù.

Driving Query ½ºÅ¸ÀÏÀ̶õ?
·¹ÄÚµå Àüü¸¦ °¡Á®¿À´Â°Ô ¾Æ´Ï¶ó, ÁÖÅ°¸¸ °¡Á®¿Â ´ÙÀ½¿¡ ÇÊ¿ä½Ã¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀÇ DAO¸¦ »ç¿ëÇؼ­ °´Ã¼¸¦ DB¿¡¼­ ·ÎµùÇÏ´Â ¹æ¹ý. ÀÌ ¹æ¹ýÀ» ¾²´Â ÀÌÀ¯´Â DB2 ó·³ Pessimistic Locking(Àд ?ôÅ?)ÇÏ´Â °æ¿ì¿¡ Cursor ¹æ¹ýÀÌ ºñÈ¿À²ÀûÀÏ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.

ÀÌ ³à¼®ÀÇ ±¸ÇöüÀÎ DrivingQueryItemReader°¡ ÀÇÁ¸ÇÏ°í ÀÖ´Â ÀÎÅÍÆäÀ̽º KeyCollector.
 public interface KeyCollector {

    List retrieveKeys(ExecutionContext executionContext);

    void updateContext(Object key, ExecutionContext executionContext);
  }

ù¹ø° ¸Þ¼Òµå¾ß »·ÇÏ°í, updateContext´Â ÇöÀç ¾îµð±îÁö Àоú³ª, Ã¥°¥ÇǸ¦ ³¢¿öµÎ´Â °Ì´Ï´Ù.

KeyCollector ±¸Çöü
- SingleColumnJdbcKeyCollector : ÁÖÅ°°¡ Ä÷³ Çϳª À϶§ »ç¿ë.
  SingleColumnJdbcKeyCollector keyCollector = new SingleColumnJdbcKeyCollector(getJdbcTemplate(),
  "SELECT ID from T_FOOS order by ID");

  keyCollector.setRestartSql("SELECT ID from T_FOOS where ID > ? order by ID");

  ExecutionContext executionContext = new ExecutionContext();

  List keys = keyStrategy.retrieveKeys(new ExecutionContext());

  for (int i = 0; i < keys.size(); i++) {
    System.out.println(keys.get(i));
  }
Èì.. ÀÌ ¿¹Á¦ ÄÚµå´Â Àß ÀÌÇØ°¡ ¾È °¡³×¿ä. ItemReader ÀÎÅÍÆäÀ̽º´Â ¾È »ç¿ëÇϳª;;

º¹ÇÕÅ° À϶©?? ExecutionContextRowMapper

½Å°í

'Spring Batch > Chapter 3' Ä«Å×°í¸®ÀÇ ´Ù¸¥ ±Û

ItemReader - Spring Batch Chapter 3  (7)2008.07.29
top

The Domain Language of Batch - Spring Batch Chapter 2



¹èÄ¡ °³³äÀ» ÀÍÈ÷±â Á¤¸» ÁÁÀº éÅÍ°¡ ¾Æ´Ñ°¡ »ý°¢µË´Ï´Ù. ½ºÇÁ¸µ ¹èÄ¡ÀÇ µµ¸ÞÀÎ ¾ð¾îÀÎÁö, ÀϹÝÀûÀÎ ¹èÄ¡ÀÇ µµ¸ÞÀÎ ¾ð¾îÀÎÁö´Â ±¸ºÐÇϱâ ÈûµéÁö¸¸, »ó´çÈ÷ ¸¹ÀÌ Á¤Á¦µÇ¾î ÀÖ´Ù´Â ´À³¦À» ¹ÞÀ» ¼ö ÀÖ¾ú½À´Ï´Ù. ºÐ¸í, ¼ö ¸¹Àº ÇÁ·ÎÁ§Æ®ÀÇ ¹èÄ¡ ÀÛ¾÷À» Çϸ鼭 µµÃâÇس½ µµ¸ÞÀÎ ¾ð¾îµéÀÌ ¾Æ´Ò±î »ý°¢µË´Ï´Ù.

¿äÁòÀº ±ÍÂú¾Æ¼­ ±×¸²À» ¾È ±×·È¾ú´Âµ¥, ¿À·£¸¸¿¡ ±×·ÁºÁ¾ß°Ú½À´Ï´Ù. ·¹ÆÛ·±½º¿¡ ³ª¿ÍÀÖ´Â ±×¸²¿¡ Ç¥ÇöÇÏÁö ¾ÊÀº µµ¸ÞÀÎ(JobParameters, ExecutionContext, Persistence ¿©ºÎ)µµ À־¿ä.

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö

Èı¤ÀÌ ÀÖ´Â ³à¼®µéÀº Persistent DomainÀÔ´Ï´Ù. Áï (DB¸¦ »ç¿ëÇÑ´Ù´Â °¡Á¤ÇÏ¿¡) StepÀ̶ó´Â Å×À̺íÀÌ ¾ø´Ù°í (Áï, Step Á¤º¸¸¦ À¯ÁöÇÏÁö ¾Ê´Â´Ù°í) ºÁµµ µË´Ï´Ù. ±×·¡¼­ StepExecution Å×ÀÌºí¿¡´Â JobExecutionÀÇ ÁÖÅ°¸¦ ÂüÁ¶ÇÏ´Â ¿Ü·ÊÅ° Ä÷³¸¸ ÀÖ°í Step_ID¿Í °°Àº Ä÷³Àº ¾ø½À´Ï´Ù.

¿¬ÇÑ»ö ¹Ú½º´Â ÀÎÅÍÆäÀ̽º, ÁøÇÑ »öÀº Ŭ·¡½ºÀÔ´Ï´Ù.

ExcutionContext´Â StepExcuion ´ç Çϳª¾¿ »ý¼ºµË´Ï´Ù.

Àç¹ÌÀÖ´Â °Ç Àú µµ¸ÞÀεéÀ» ÀúÀåÇϴ åÀÓÀ» Áö´Ñ JobRepository¶ó´Â ÀÎÅÍÆäÀ̽ºÀε¥, ÀÌ ³à¼®ÀÇ ±¸ÇöÀÌ ¾î¶»°Ô µÇ¾î ÀÖÀ»±î ±Ã±ÝÇߴµ¥, ±¸Çöü´Â ¾ø¾ú½À´Ï´Ù. ¾î¶»°Ô ±¸ÇöÇØ¾ß ÇÒ·±Áö... JDBC ¸»°í ¾Ö³ëÅ×ÀÌ¼Ç ±â¹Ý ÇÏÀ̹ö³×ÀÌÆ®¸¦ ½á¼­ ±¸ÇöÇÏ´Â ¹æ¹ýÀÌ ±Ã±ÝÇØÁý´Ï´Ù. JobRepositoryHibernate ¾ß.. ¹¹ SessionFactory¸¸ ÀÖÀ¸¸é ¾Ë¾Æ¼­ ³Ö¾îÁÙÅ×´Ï °ÆÁ¤µÇÁö ¾Ê´Âµ¥, Àúµé µµ¸ÞÀÎÀÇ ¸ÊÇÎ Á¤º¸¸¦ ³Ñ°ÜÁà¾ß Çϴµ¥ ¸»ÀÌÁÒ. ±×°É ¾î¶»°Ô ¾Ö³ëÅ×À̼ÇÀ¸·Î ÇÒ ¹æ¹ýÀº ¾øÀ»±î¿ä. Èì... XML·Î¸¸ ÇØ¾ß ÇÒ±î¿ä. XML ·Î ÇØ¾ß ÇÑ´Ù¸é, ¸ÊÇÎ Á¤º¸´Â ¾î¶»°Ô ¸¸µé¸é µÉ±î¿ä? ¾î´ÀÁ¤µµ °íÁ¤ÀûÀÎ µµ¸ÞÀÎÀ̴ϱî, Çϳª ¸¸µé¾î µÎ´Â°Ô ÁÁÀ» °Í °°½À´Ï´Ù.

Èì.. Spring Batch + ÇÏÀ̹ö³×ÀÌÆ®¸¦ ±â¹ÝÀ¸·Î ÇÑ ¾î¶² ÇÁ·¹ÀÓ¿öÅ©°¡ µÇ°Ú±º¿ä.

ÀÚ¼¼ÇÑ ¼³¸íÀº http://static.springframework.org/spring-batch/spring-batch-docs/reference/html/core.html ¸¦ ÂüÁ¶Çϼ¼¿ä.