[SPRING/JPA] JPA Repository가 정상적으로 DI 되지 않는 현상
오류
Description:
Parameter 0 of constructor in com.my.service.MyService required a bean of type 'com.my.jpa.repository.MyRepository' that could not be found.
Action:
Consider defining a bean of type 'com.my.jpa.repository.MyRepository' in your configuration.
entity 클래스와 repository가 생성했는데도 불구하고 데이터 주입이 되지 않는 현상이 발생했다.
//entity 클래스
@Entity
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class MyEntity {
@Id
private Long id;
private String name;
}
//repository 인터페이스
public interface MyEntityRepository extends JpaRepository<MyEntity, Long> {
}
원인
JPA에 대한 설정을 제대로 하지 않은게 문제였다.
개인적을 공부 할 때는 모듈 개념없이 진행을 해서 별다른 설정이 필요 없는것으로 잘못 알고 있었다.
gradle에서 boot-data-jpa 의존성만 가져오면 모든게 다 되었기 때문…ㅠㅠ
현재 하는 프로젝트는 간단하게 몇개의 모듈로 나눠져있는데 프로젝트 구조는 대략적으로 다음과 같다.
my-starter ---> my-mvc ---> my-config
starter에 sptring boot starter가 있었고, mvc쪽에 entity와 repository가 있다.
starter가 mvc를 참조하고 있기 때문에 mvc에 있는 entity와 repository가 자동으로 인식 될줄 알았지만 아니었다.
해결
어노테이션 2개로 간단하게 해결 가능하다.
@ComponentScan 처럼 직접 패키지를 scan하도록 설정해주면 된다.
- @EnableJpaRepositories : jpa repository를 사용하겠다는 설정
- @EntityScan : entitiy를 scan
각 어노테이션에 직접 패키지를 입력해주면 된다.
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"com.my.jpa.repository"}) // com.my.jpa.repository 하위에 있는 jpaRepository를 상속한 repository scan
@EntityScan(basePackages = {"com.my.jpa.entity"}) // com.my.jpa.entity 하위에 있는 @Entity 클래스 scan
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
패키지를 명세해주면 정상적으로 작동한다 ㅎㅎ
참고