작성
·
5.2K
0
안녕하세요
스프링DB접근기술 - JPA 강의 부분에서
스프링부트 JPA 연동해서 실행하는데 아래와 같은 에러가 나서 질문드립니다.
Caused by: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'memberService' defined in class path resource [com/example/hellospring/SpringConfig.class]: Cannot register bean definition [Root bean: class [null];
제가 이해한 바로는
memberService에서 bean이 잘못 정의 되어 있고,
SpringConfig 클래스에서 bean을 등록할수 없다고하는데
루트 bean 클래스가 null 이라는데 (이건 어디가 루트고 어디가 null 인지 잘 모르겠습니다.)
아래 코드들로 확인할 수 있는 방법이 있을까요?
대체 어디가 bean이 잘못 정의 되어 있고 null 인지를 모르겠네요..
아래는 memberService 코드입니다. import문은 전부 제거했습니다.
package com.example.hellospring.service;
@Transactional
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
/**
* 회원가입
*/
public Long join(Member member){
validateDuplicateMember(member); // 중복회원 검증
memberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
/**
* 전체 회원 조회
*/
public List<Member> findMembers(){
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
}
다음은 SpringConfig.java 코드입니다. 역시나 import문은 제거했습니다.
package com.example.hellospring;
@Configuration
public class SpringConfig {
private EntityManager em;
@Autowired
public SpringConfig(EntityManager em) {
this.em = em;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new JpaMemberRepository(em);
}
}
참고로 회원가입에서 Run으로 실행하기 전까지는 db도 잘 연결되고 아주 잘 따라하고 있었습니다
감사합니다
답변 3
0
0
작성자 답변입니다.
SpringConfig.java 에서
아래와 같이 PersistenceContext 어노테이션을 달았는데 동일한 에러가 발생하네요..
참고로 public SpringConfig 생성자에 @PersistenceContext 달면 생성자에는 달 수 없다는 표시가 뜨네요
@PersistenceContext
private EntityManager em;
//@Autowired
public SpringConfig(EntityManager em) {
this.em = em;
}
답변 감사합니다 그런데 새로운 오류가 발생합니다
'JpaProperties'에 바인딩을 할 수 없다고 뜨네요
제 application.properties 설정이 잘못됐나요?
참고로 제 application.properties 는 아래와 같습니다.
에러 메시지는 아래와 같습니다.(한글깨짐은 검색한 모든 방법을 동원해도 바뀌지 않아서 양해 부탁드립니다..)
Caused by: org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Error creating bean with name 'spring.jpa-org.springframework.boot.autoconfigure.orm.jpa.JpaProperties': Could not bind properties to 'JpaProperties' : prefix=spring.jpa, ignoreInvalidFields=false, ignoreUnknownFields=true; nested exception is org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'spring.jpa.show-sql' to boolean
Caused by: org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [boolean] for value 'true #jpaê° ë 리ë sqlì ë³¼ ì ìì'; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'boolean'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [true #jpaê° ë 리ë sqlì ë³¼ ì ìì]
Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'boolean'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [true #jpaê° ë 리ë sqlì ë³¼ ì ìì]
Caused by: java.lang.IllegalArgumentException: Invalid boolean value [true #jpaê° ë 리ë sqlì ë³¼ ì ìì]
혹시모르니 build.gradle도 같이 올립니다.