ERROR : BeanDefinitionStoreException, ConflictingBeanDefinitionException

NtoZ·2023년 6월 21일
0

error

목록 보기
4/7
post-thumbnail

🚩 BeanDefinitionStoreException과 ConflictingBeanDefinitionException

발단


JpaBasicConfig 클래스 파일의 이름을 변경한 이후, 패키지 위치를 옮겨주었다.
이후 해당 클래스를 실행하려고 하니 다음과 같은 에러가 발생했다.

  • JpaBasicConfig.java
package com.codestates.basic;

import com.codestates.entity.Member;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;

@Configuration
public class JpaBasicConfig {
    private EntityManager em;
    private EntityTransaction tx;

    //(2)
    @Bean
    public CommandLineRunner testJpaBasicRunner(EntityManagerFactory emFactory) {
        this.em = emFactory.createEntityManager(); // (2)
        this.tx = em.getTransaction();

        return args -> {
            example05();
        };
    }

    private void example05() {
        tx.begin();
        em.persist(new Member("hgd1@gmail.com"));
        tx.commit();

        tx.begin();
        Member member = em.find(Member.class, 1L);
        em.remove(member);
        tx.commit();
    }
}
  • 예외 로그
    • org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.codestates.Section3Week2TemplateJpaApplication]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'jpaBasicConfig' for bean class[com.codestates.basic.JpaBasicConfig] conflicts with existing, non-compatible bean definition of same name and class [com.codestates.JpaBasicConfig]
      at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:189) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.0.jar:2.7.0]
      at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-2.7.0.jar:2.7.0]
      at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.0.jar:2.7.0]
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.0.jar:2.7.0]
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.7.0.jar:2.7.0]
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-2.7.0.jar:2.7.0]
      at com.codestates.Section3Week2TemplateJpaApplication.main(Section3Week2TemplateJpaApplication.java:10) ~[main/:na]
      Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'jpaBasicConfig' for bean class [com.codestates.basic.JpaBasicConfig] conflicts with existing, non-compatible bean definition of same name and class [com.codestates.JpaBasicConfig]
      at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:349) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:287) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:128) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:296) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:207) ~[spring-context-5.3.20.jar:5.3.20]
      at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:175) ~[spring-context-5.3.20.jar:5.3.20]
      ... 13 common frames omitted

문제 진단

문제 해결

  • 핵심은 gradle warpper 를 이용해서 gradleclean 시켜주는 것이다.
    ./gradlew clean
    • Gradle Warpper 란, Gradle 을 build 하기 위한 Gradle 에서 공식적으로 제안하는 script 파일입니다.
      Gradle 을 별다른 설치 작업 없이 버전을 내포해서 다운로드 및 실행시키기위해 필요한 스크립트입니다.
      IntelliJ 에서는 Gradle 을 기본적으로 build tool 로 사용한다면 제공됩니다.

      자세한 내용은 아래 공식 홈페이지를 참고 부탁드립니다.
      https://docs.gradle.org/current/userguide/gradle_wrapper.html

      만약, 단순 파일이동이나 작업 후 ConflictingBeanDefinitionException 오류가 발생하였는데 중복된 Bean 이 존재하지 않는다면 ./gradlew clean 을 우선적으로 실행시키는 것이 정신적으로나 시간적으로도 이롭습니다.
profile
9에서 0으로, 백엔드 개발블로그

0개의 댓글