JAVA

Spring 프로젝트에서 'dataSource'를 참조할 수 없는 문제 해결하기

wooyit 2023. 7. 13. 07:50

안녕하세요, 오늘은 Spring 프로젝트에서 빌드 중에 'dataSource' 참조에 관한 오류를 해결하는 방법에 대해 알아보겠습니다.

먼저, 오류 메시지를 살펴보면 다음과 같습니다.

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlMapClient' defined in file [C:\eGovFrameDev-3.8.0-64bit\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\fri_oper\WEB-INF\classes\spring\common\context-sqlMap.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' is defined
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:334)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1419)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1160)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:449)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:423)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:551)
	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:178)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:304)
	... 43 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' is defined
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:577)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1111)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:276)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
	... 58 more

이 오류는 Spring 컨테이너가 'dataSource'라는 이름의 bean을 찾지 못했음을 나타냅니다. 이 문제는 보통 dataSource가 정의되지 않았거나, 올바르게 정의되지 않았을 때 발생합니다.

하지만 이 경우에는 'dataSource' bean이 정의되어 있음에도 불구하고, 같이 사용되는 log4jdbc 때문에 문제가 발생했습니다. log4jdbc는 JDBC API를 사용해 SQL을 로깅하는 Java 라이브러리로, Spring의 dataSource와 충돌할 수 있습니다

 

이 문제를 해결하기 위해 다음과 같은 절차를 진행합니다.

 

1. 톰캣 서버를 더블 클릭하여 서버 설정에 접근합니다.

톰캣 서버 더블 클릭

2. 서버 설정에서 'Arguments' 탭을 선택합니다.

서버 configuration properties

3. 'VM arguments' 영역에 -Dlog4jdbc.drivers=com.tmax.tibero.jdbc.TbDriver를 입력합니다.

Arguments 탭

이렇게 하면 Spring이 dataSource bean을 찾을 수 없는 문제를 해결할 수 있습니다. 추가적으로, 이는 특히 Tibero 데이터베이스를 사용하는 경우에 발생하는 문제로, -Dlog4jdbc.drivers 뒤에 오는 드라이버 클래스명은 사용하는 데이터베이스에 맞게 변경해야 합니다.

마지막으로, 이와 같은 문제는 라이브러리 간의 충돌로 인해 발생하는 것이므로, 프로젝트에서 사용하는 라이브러리와 그들이 의존하는 다른 라이브러리들 사이의 관계를 잘 이해하는 것이 중요합니다.