- 해당 문제는 보통 애러로그를 제대로 읽어 봐야한다
Description:
Parameter 0 of constructor in com.example.mytodo.domain.todo.service.TodoServiceImpl required a bean of type 'com.example.mytodo.domain.todo.repository.TodoRepository' that could not be found.
- 애러 로그는 이렇다 보면
TodoRepository
의 bean이 주입이 되지 않았다는 것이다
여기서 나는 몇가지 가능성을 살펴 보았다
- 실수로 Annotation을 주입을 안했다
@Repository
interface TodoRepository: JpaRepository<Todo, Long> {
@Query("SELECT p FROM Todo p WHERE p.endTime = CURRENT_DATE")
fun getTodayTodoList(): List<Todo>
}
@Service
class TodoServiceImpl(
private val todoRepository: TodoRepository,
private val commentRepository: CommentRepository,
): TodoService {
@Entity
@Table(name = "todo")
class Todo(
- 일단 위에 애러에 명시되어 있는 코드를 전부 확인해봤는데 Bean 주입 Annotation은 전부 작성을 확인했다
- DB와 Entity간의 데이터 주입이 제대로 이루어지지 않았다
- Entity 클래스에 직접 접속을 해서 클래스 명 옆에 데이터 베이스 그림을 우클릭 한 후에 데이터 소스 할당을 클릭한다
- 원하는 데이터 소스를 할당하면 끝!!
- Import문이 제대로 작성되지 않아 다른 Repository를 상속 받고 있다
- Import문을 전부 검사해봤지만 해당 부분에서의 문제는 보이지 않고 있다
- DB와의 직접 연결이 원활하지 않다
- 원하는 DB를 우클릭 후에 프로퍼티를 클릭 후 여기서 호스트와 포트번호 상태가 정상인지 확인하고 사용자와 비밀번호를 입력한다음에 연결 테스트를 시도한다
근데 나는 저 위에 방법이 다 정상 작동을 하는데도 같은 애러가 반복해서 발생을 했다
- 그래서 다음 단계로 넘어갔다 일단 현재 Entity 내부에 상속을 받고 있는 클래스가 있는데 해당 클래스에 Bean을 주입해주었다
@Configuration
@MappedSuperclass
abstract class DateTime {
private var createAt: LocalDateTime = LocalDateTime.now()
private var updateAt: LocalDateTime = LocalDateTime.now()
@Bean
@PrePersist
fun firstDateTime() {
createAt = LocalDateTime.now()
updateAt = createAt
}
@Bean
@PreUpdate
fun setUpdateAt() {
updateAt = LocalDateTime.now()
}
@Bean
fun getCreateAt(): LocalDateTime {
return createAt
}
@Bean
fun getUpdateAt(): LocalDateTime {
return updateAt
}
}
- 같은 애러 발생;; 이 후 AutoWired와 ComponentScan 등의 Annotation등을 활용하여 Bean을 등록 및 주소를 강제 할당 해봤는데 소용이 없었다
- 그래서 생각한 것이 Repository를 주석처리 하고 돌려봤는데 이번에는 다른 Repository에서 애러가 발생하는 것 아닌가(그것도 동일 애러;;)
- Repository 전체를 주석처리 하고 돌리니까 정상적인 빌드가 확인 되었다
- 즉 이번 문제는 Repository와 Service간의 소통 간에서 Bean이 없어서 생기는 문제다
- 라고는 생각했는데 뾰족한 수가 보이지 않는 것 같아서 IDE를 전체를 뒤져보았는데
- 2가지 의문점이 있었다
- 1. Application.yml 파일에 있는 저건 뭐지??
spring:
autoconfigure:
exclude: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
- 사실 이것은 Spring 초기에 빌드가 안되서 이거를 붙여놓은 건데 생각해보면 지금 Dependency에 해당 의존성도 추가해놨고 DB연결도 해놨으니까 없어도 되는 것 아니었나
- 2. 환경 변수에 Port 번호가 안적힘
- 보통 테스트때에는 Yml에 DB 정보를 기입하고 빌드를 하는데 보안을 위해서 환경 변수를 이용하여 작성을 했는데 환경변수 내용에 Port 번호가 빠져있다 바로 Port 번호를 적어주고 위에 내용을 삭제 하니까
- 정상적으로 빌드 확인되었다
- 결론
- 애러가 나면 애러만 보지 말고 해당 애러에 관한 모든 정보를 다 봐야 한다
- 환경 변수 설정을 잘하자...
'Kotlin > Spring' 카테고리의 다른 글
(Spring) HTTP 프로젝트 HTTPS로 업그레이드 하기 (0) | 2024.05.31 |
---|---|
(Spring) 복합키 설정 시 entitynotfoundexception unable to find with id 0 애러 해결 (0) | 2024.05.31 |
(Spring) FATAL: Max client connections reached 애러 해결 (0) | 2024.05.28 |
(Spring) 사용자 관리를 손쉽게!! Spring Security의 구조를 알아보자!! (0) | 2024.05.22 |
(Spring) BeanCreationException : Ambiguous mapping. Cannot map 'todoController' method 해결 방법 (0) | 2024.05.14 |