안녕하세요, 오늘은 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' 탭을 선택합니다.
3. 'VM arguments' 영역에 -Dlog4jdbc.drivers=com.tmax.tibero.jdbc.TbDriver를 입력합니다.
이렇게 하면 Spring이 dataSource bean을 찾을 수 없는 문제를 해결할 수 있습니다. 추가적으로, 이는 특히 Tibero 데이터베이스를 사용하는 경우에 발생하는 문제로, -Dlog4jdbc.drivers 뒤에 오는 드라이버 클래스명은 사용하는 데이터베이스에 맞게 변경해야 합니다.
마지막으로, 이와 같은 문제는 라이브러리 간의 충돌로 인해 발생하는 것이므로, 프로젝트에서 사용하는 라이브러리와 그들이 의존하는 다른 라이브러리들 사이의 관계를 잘 이해하는 것이 중요합니다.
'JAVA' 카테고리의 다른 글
Java 빌드 오류 해결: "HIGHEST_SPECIAL cannot be resolved or is not a field" (0) | 2023.07.13 |
---|---|
eGovFramework 3.8 버전에서 JBoss 환경 설정하기 (0) | 2023.07.13 |
Axon Framework에서 @TargetAggregateIdentifier 주석 사용하기 (0) | 2023.03.24 |
[Axon] jakarta.persistence.PersistenceException (1) | 2023.03.24 |
AxonFramework와 kafka를 활용한 게시판 서비스 구현하기.(feat Spring Boot) (1) | 2023.03.24 |