spring batch 2.x 재시도 정책 관련하여 질문드립니다

244 views
Skip to first unread message

minjin

unread,
Jan 13, 2010, 2:47:11 AM1/13/10
to Korea Spring User Group
고수님들의 도움 부탁드립니다

배치프레임웍을 적용하면서 재시도 관련하여 설정을 하다보니
궁금한 점이 몇가지 있어서요..

우선, 스텝 설정은 대략 아래와 같습니다
<step id="step2" parent="stepParent">
<tasklet>
<chunk reader="syncItemReader"
processor="syncItemProcessor"
writer="syncItemWriter"
commit-interval="1" skip-limit="10">
<skippable-exception-classes>
java.lang.Exception
</skippable-exception-classes>
</chunk>
</tasklet>
</step>

<bean id="stepParent"
class="org.springframework.batch.core.step.item.FaultTolerantStepFactoryBean"
abstract="true">
<property name="retryPolicy">
<bean
class="org.springframework.batch.retry.policy.NeverRetryPolicy" />
</property>
</bean>

첫시도만 허용하고 재시도는 없도록 설정하려고 위와 같이 설정했으나
로딩이 제대로 되지 않고 있습니다

심각: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'step2': Error setting property values; nested
exception is org.springframework.beans.NotWritablePropertyException:
Invalid property 'retryPolicy' of bean class
[org.springframework.batch.core.configuration.xml.StepParserStepFactoryBean]:
Bean property 'retryPolicy' is not writable or has an invalid setter
method. Does the parameter type of the setter match the return type of
the getter?
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues
(AbstractAutowireCapableBeanFactory.java:1279)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean
(AbstractAutowireCapableBeanFactory.java:1010)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean
(AbstractAutowireCapableBeanFactory.java:472)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean
(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory
$1.getObject(AbstractBeanFactory.java:264)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton
(DefaultSingletonBeanRegistry.java:222)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean
(AbstractBeanFactory.java:261)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:185)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:164)
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons
(DefaultListableBeanFactory.java:423)
at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization
(AbstractApplicationContext.java:728)
at
org.springframework.context.support.AbstractApplicationContext.refresh
(AbstractApplicationContext.java:380)
at
org.springframework.web.context.ContextLoader.createWebApplicationContext
(ContextLoader.java:255)
at
org.springframework.web.context.ContextLoader.initWebApplicationContext
(ContextLoader.java:199)
...more

FaultTolerantStepFactoryBean 클래스에는 'retryPolicy' 의 setter가 존재하는데
StepParserStepFactoryBean라는 빈에서 에러가 발생합니다
구글 검색을 통해선 도무지 원인을 찾을 수가 없네요..

참고로, 특정 재시도 정책을 적용하기 위해 저와 같은 설정이 맞는건지
조언을 주시면 감사하겠습니다
(모든 exception에 대해서 skip 하되, 재시도는 하지 않도록 설정하려고 합니다)


답변 부탁드립니다

Sanghyuk Jung

unread,
Jan 13, 2010, 5:43:21 PM1/13/10
to ks...@googlegroups.com
일단 item들을 처리할 때 모든 exception에 대해서 skip하도록 했다면, 논리상으로도 skip한 item을 다시 retry하지는 않을 것입니다.
그리고 job전체를 재시도 없이 한번만 실행허용한다고 하면 restartable=false로 놓으면 되지 않을까 하구요.
 
custom naming space의 의한(<step/> 태그) step 설정에서 지정한 skiptable exception 설정이나 retryable exception설정도 다 retrypolicy이므로 다시 neverRetryPolicy를 설정할 필요는 없을 것으로 보입니다.
 
(소스를 좀 보고 이야기해야 하는데, 집이라서; 회사가서 오후에 시간날때 좀 더 자세히 보고 추가 답변 달겠습니다~)

2010년 1월 13일 오후 4:47, minjin <javah...@gmail.com>님의 말:
--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.




Reply all
Reply to author
Forward
0 new messages