[½ºÇÁ¸µ ¹èÄ¡ 2.0] °ÉÀ½¸¶ ¶¼±â
Spring Batch/etc : 2009.08.21 00:26
1. ¶óÀ̺귯¸® Ãß°¡.
pom.xml¿¡ ½ºÇÁ¸µ ¹øµé ÀúÀå¼Ò¿¡¼ Á¦°øÇÏ´Â ½ºÇÁ¸µ ¹èÄ¡ °¡Àå ÃֽŠ¹öÀüÀ» Ãß°¡ÇØÁÝ´Ï´Ù
ÇÁ·ÎÁ§Æ®°¡ ¼¼ °³·Î ³ª´²Á® ÀÖ´õ±º¿ä. test ¸ðµâÀº Å×½ºÆ® ¿ëÀ̴ϱî test scopeÀ¸·Î ¼³Á¤ÇÏ´Â °ÍÀÌ ÁÁ°Ú³×¿ä.
<dependency>
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>
<dependency>
<groupId>org.springframework.batch</groupId> <artifactId>org.springframework.batch.infrastructure</artifactId> <version>2.0.2.RELEASE</version>
</dependency>
<dependency>
<dependency>
<groupId>org.springframework.batch</groupId> <artifactId>org.springframework.batch.test</artifactId>
<version>2.0.2.RELEASE</version>
<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¸¦ ¸¸µé¾î ÁÖ´Â°Ô ÀÖÀ» ¹ýµµ Çѵ¥ ¸»ÀÌÁÒ.
¹èÄ¡ Å×½ºÆ®¿¡ ´ëÇÏ ¾Ë¾ÆºÁ¾ß°Ú½À´Ï´Ù. ¾î¶»°Ô Å×½ºÆ® ÇÒ ¼ö ÀÖ´ÂÁö. ½ºÇÁ¸µ ¹èÄ¡°¡ Á¦°øÇØÁÖ´Â Å×½ºÆ® ¹æ¹ýÀº ¾î¶² °ÍÀÎÁö.
ÇÏÀ̹ö³×ÀÌÆ®¿Í ½ºÇÁ¸µ ¹èÄ¡ ±âº» Å×ÀÌºí ½ºÅ°¸¶¸¦ ¸ÊÇÎÇØÁÙ ÀÚ¹Ùºó °´Ã¼µéÀº ¾ø´ÂÁö »ìÆìºÁ¾ß°Ú½À´Ï´Ù. À̰͵µ ¾îµò°¡ ÀÖÀ» ¹ýµµ Çѵ¥ ¸»ÀÌÁÒ. Å×ÀÌºí º¸°í¼ Á÷Á¢ ÀÚ¹Ùºó ¸¸µé¾î¼ ¸ÊÇÎ ÇØÁÖ±â´Â Á» ±ÍÂúÀÚ³ª¿ä. ´©±º°¡ Çسù°Å³ª.. ÇÏÀ̹ö³×ÀÌÆ® Åø·Î ½ºÅ°¸¶¿¡¼ ÀÚ¹ÙºóÀ» ¸¸µé°í ¸ÊÇεµ ÇØÁÖ´Â °É ã¾Æº¸´ø°¡ Çؾ߰ڽÀ´Ï´Ù. ÇÏÀ̹ö ¸ÊÇθ¸ ³¡³ª¸é.. ¹¹ ¹èÄ¡ Á¤º¸ °¡Á®¿Í¼ ȸ鿡 »Ñ·ÁÁֱ⸸ ÇÏ¸é µÇ´Ï±ñ.. ½ÄÀ» Á× ¸Ô±â°Ú³×¿ä.
À½.. ±×¸®°í °£°£È÷ ·¹ÆÛ·±½º º¸¸é¼ ÀÌ·Ð °øºÎµµ Á» Çؾ߰ڳ׿ä. ¿©·¯ ¿ë¾îµéÀ̶û °³³äµé ±âŸ ¼¼ºÎ ±â´Éµé¿¡´Â ¹¹°¡ ÀÖ´ÂÁö µîµîµî.
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' Ä«Å×°í¸®ÀÇ ´Ù¸¥ ±Û
2009.08.21 |