반응형

스프링 배치(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>
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기