작성
·
874
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
안녕하세요?
어제부터 계속 시도해보는데 해결되지 않아 질문 드립니다..
JPA와 DB 설정, 동작 확인 강의에서, Test를 실행하려는데 아래와 같은 에러가 발생합니다.
에러를 해결해보기 위해 여기 질문게시판을 찾아보았으나, 저와 상관 없는 사유였거나 해당 솔루션으로 해결되지 않았습니다... H2 실행한 상태이고, jpashop.mv.db도 생성된 상태입니다. Junit 4이고, 원래는 5였는데 선생님께서 진행하신 버전이 4라서 다시 삭제하고 재생성하여 진행하였습니다. H2 버전 2.1.214로 낮춰보라는 글도 있어 전부 삭제 후 다시 설치하여 db 다시 생성해보았기도 했는데 실패하였습니다..
아래는 에러코드 전문이며, 제 코드는 Google Drive에 올려 URL로 달아두었습니다.. 도와주시면 감사하겠습니다.
Google Drive: https://drive.google.com/drive/folders/1ZKGI6dlldF4RAEfNdmaRrFlmBxTatQww?usp=sharing
<에러코드>
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@79fd6f95 testClass = jpabook.jpashop.MemberRepositoryTest, locations = [], classes = [jpabook.jpashop.JpashopApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@3f197a46, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@50b472aa, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4facf68f, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@243c4f91, org.springframework.boot.test.context.SpringBootTestAnnotation@83724131], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:143)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127)
at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191)
at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberRepository': Injection of persistence dependencies failed
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessProperties(PersistenceAnnotationBeanPostProcessor.java:388)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1416)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:597)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:942)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:436)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1406)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:187)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:119)
... 27 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'jakarta.persistence.EntityManagerFactory' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1247)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:593)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:557)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:724)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:697)
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:270)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessProperties(PersistenceAnnotationBeanPostProcessor.java:385)
... 49 more
답변 2
1
안녕하세요. WhiteTor님, 공식 서포터즈 David입니다.
코드상 강의와 다른 부분이 일부 발견되어 알려드립니다.
해당 부분을 제외시키면 잘 동작하오니 참고해 주세요.
아래쪽에 데이터 소스를 자동 설정하는 부분을 제외하신 부분과 일부 의존성이 추가된 부분을 강의와 동일하게 작성하신 뒤 다시 시도해 주세요.
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
implementation("h2:h2:0.2.0")
implementation("net.xdob.h2db:h2:2.0.0")
implementation("com.eventsourcing:h2:1.4.192")
감사합니다.
1
안녕하세요, 인프런 AI 인턴이에요. JPA와 DB 설정, 동작 확인 강의에서 발생하는 테스트 실행 오류에 대해 질문이 있으신 것 같아요.
에러 메시지와 코드를 확인해보니, “java.lang.IllegalStateException: Failed to load ApplicationContext” 오류가 발생하고 있습니다. 이 오류는 스프링 애플리케이션 컨텍스트를 로드할 수 없는 상태에서 발생합니다.
이런 경우에는 다음과 같은 원인이 있을 수 있습니다.
1. 필요한 의존성이 올바르게 추가되지 않았을 가능성이 있습니다. 프로젝트의 의존성 관리 파일(pom.xml 또는 build.gradle)을 확인해보세요.
2. 스프링 설정이 올바르게 되어있지 않을 수 있습니다. 스프링 설정 파일을 확인하고, 컴포넌트 스캔이나 빈 설정 등이 제대로 되어 있는지 확인해보세요.
3. 테스트 클래스의 경로나 패키지 구조가 올바르지 않거나, 테스트 대상 빈이 스캔되지 않을 수도 있습니다. 테스트 클래스와 테스트 대상 빈의 위치 및 컴포넌트 스캔 설정을 확인해보세요.
구체적인 원인 파악을 위해서는 스프링 설정 파일(xml 또는 JavaConfig)과 테스트 클래스의 코드를 살펴볼 필요가 있습니다. 질문에 첨부해주신 Google Drive 링크를 통해 코드를 확인해보겠습니다.
그리고, 에러 메시지에서 언급하신대로 H2 데이터베이스가 제대로 실행되었는지 확인해보세요. 데이터베이스 연결 정보가 올바르게 설정되었는지, 데이터베이스 파일이 생성되었는지 확인해보세요.
만약에 위의 방법으로 해결되지 않는다면, 더 자세한 정보가 필요할 수 있으니, 추가적인 내용을 알려주시면 더 도움을 드릴 수 있어요. 감사합니다.
SpringBoot를 이제 공부하기 시작하여 제가 더 양질의 오류 정보(?)를 알려드리기는 어려우나, 제가 아는 선에서 인턴님께서 말씀하신 부분 체크해보았습니다....
Dependency는 강의에서 나온 부분을 그대로 따라하기도 했고, 추가로 크게 건드는 부분은 없었어서 이 부분은 잘 모르겠습니다..
H2 Database에서 db.mv가 약간 다르게 생성되어있는 부분을 발견해서 전부 삭제 후 재생성하였으나 변화는 없었습니다.
연결 정보는 application.yml에서 확인하였으나, url, username, password(비어있음) 모두 틀림없음을 확인하였습니다..
와 저 부분 해결하니까 잘 실행됩니다! 초장부터 잘 되지 않아 심란했는데 해결해주시니 너무 감사합니다!!!!