스프링 배치(Spring Batch)의 job.xml에서 Listener에 대한 bean을 주입했었다. 그리고, Listener.java에서 sqlSessionTemplate를 생성하여 @Autowired와 @Qualifier 애노테이션을 추가했다.
SkipListener.java
@Autowired
@Qualifier("sqlSessionTemplateTest")
SqlSessionTemplate sqlSessionTemplateTest;
SkipListener.java
<beans>
<bean id="SkipListener" class="com.test.tasklet.SkipListener">
<property name="sqlSessionTemplateTest" ref="sqlSessionTemplateTest" />
</bean>
</beans>
위와 같이, job.xml과 Listener.java에 추가하고 난 후에 JUnit Test를 하면 Session도 잘 들어가고 테스트가 정상적으로 된다. 근데, 서버에 올려 테스트를 하면 Session에 null이 들어가는 상황이 발생했다. 그래서, 컴포넌트 스캔 애노테이션으로 처리를 했는데도 서버가 올라갈 때 주입이 되지 않았다.
이에 발생한 에러는 아래와 같다.
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.mybatis.spring.SqlSessionTemplate' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=sqlSessionTemplateTest)}
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.mybatis.spring.SqlSessionTemplate' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=sqlSessionTemplateTest)}
그래서, 대처한 방안이 Listener bean을 주입할 때, 그 bean 안에 정의를 했다.
<beans>
<bean id="SkipListener" class="com.test.tasklet.SkipListener">
<property name="sqlSessionTemplateTest" ref="sqlSessionTemplateTest" />
</bean>
<beans>
최근댓글