@PostConstruct로 테이블을 생성하지 못합니다.
917
작성한 질문수 12
오류 내용을 보니 hello 테이블을 찾을 수 없다고 뜹니다.
그래서, @PostContruct가 안 동작하나? 생각해서 프린트로 찍어보게 메인메서드를 돌리면 잘 찍힙니다.
그리고 기존 방식처럼 jdbctemplate을 주입해서 @BeforeEach로 생성하는 방식으로는 잘 동작하네요.
너무 궁금해서 git 주소를 남겨봅니다 ㅠ
https://github.com/rnwnsgud/helloboot
답변 2
1
서버를 실행하고 API 테스트를 수행하는 중에 에러가 난 것인가요?
좀 더 구체적으로 어떤 작업을 수행하는 중에 어떤 에러가(에러 메시지를 다 올려주세요) 났는지를 알려주셔야 원인을 찾아볼 수 있습니다.
0
HelloApiTest에서 helloApi()에서 오류발생.
HelloRepositoryTest, HelloServiceCountTEst에서 오류가 발생합니다.
강의 11분 14초 쯤 @PostConstcut로 테이블을 생성하고 위 테스트를 돌리면 에러가 납니다. 아래는 오류 메시지 입니다.


오류메시지 출력전에 디버그 메시지(?) 이게 너무 많네요 일단 전부 올리겠습니다.







5
올려주신 프로젝트를 받아서 테스트를 해보니 저도 동일한 에러가 발생합니다.
일단 해결 방법은 간단합니다. 강의에서처럼 DataSourceConfig의 DataSource타입을 리턴하는 @Bean 메소드의 순서를 hikariDataSource를 앞으로 가져오면 hikariDataSource가 빈으로 선택되어서 동작하고 테스트까지 문제 없이 잘 동작합니다.
그렇다면 스프링의 SimpleDriverDataSource는 왜 DB 연결도 되고 SQL 실행도 잘 되는데, 생성한 테이블이 다음 요청을 할 때는 사라지는가라는 의문이 남습니다.
강의에서는 SimpleDriverDataSource라는 스프링에 포함된, 실전에서는 절대 사용하지 말라는 아주 단순하게 매번 커넥션을 새로 생성하는 DataSource 구현을 이용해서 일단 DataSource를 통해서 DB 연결까지 잘 수행되는지까지만 테스트를 하는데 사용했습니다. 그런데 왜 이게 생성된 DB 정보가 유지되지 않고 사라지는지는, 아마도 h2 내장형 DB와 관련이 있지 않을까 싶습니다.
이부분은 제가 아직 정확한 원인을 파악은 해보지 못했습니다. Hikari Datasource에서는 잘 동작하는 것으로 봐서는 단순 DataSource에서도 잘 동작해야할 것 같은데, 메모리에만 생성되는 내장형 DB로 동작할 때 뭔가 요구되어지는 다른 처리등이 필요한게 아닌가 싶습니다.
일단 강의에서 설명하는 내용을 테스트 해보시는 용도로는
DataSource hikariDataSource(MyDataSourceProperties properties) 메소드를 앞으로 가져오셔서 사용되게 만드시고 진행을 해보세요.
SimpleDriverDataSource가 내장형 h2를 사용할 때는 왜 에러가 나지 않고 SQL이 잘 동작했음에도, 만들어진 테이블이 사라지는지, 어떤 초기화 등이 돌아가는지 등에 관해서는 제가 시간이 날 때 한번 차근차근 살펴보도록 하겠습니다. 실전에서 쓸 기술은 아니지만, 그래도 궁금하네요.
0
제 생각으로는 @postContruct 에서 별도 create 쿼리가 수행된 이후에 커넥션을 닫아서 h2의 인메모리 모드에서 데이터베이스가 초기화되어서 그런것 같습니다.
이후 update 나 insert 를 수행할때는 SimpleDataSource 에서는 다시 커넥션을 연결을 시도하겠지만, 결국 인메모리 모드 h2 상에서는 create 한 테이블이 없기에.. 그런 것 같습니다.
Hikari cp 같은 경우에는 최소한의 idle Connection 을 유지하기에 h2 는 계속적으로 연결이 되어 있다고 생각하여, create 이후에도 별도의 초기화 과정이 수행되지 않는 것 같습니다.
1
좋은 의견 감사합니다. 아무리 메모리 DB라도 애플리케이션이 종료된 것도 아닌데 connection이 끊어졌다고 테이블을 날리느 건 좀 이상하긴 합니다. 뭔가 잘 안 맞는 조합인 것 같기도 하고요. 어쨌든 SimpleDriverDataSource와 H2를 같이 사용하지 않는게, 아무리 테스트에서도 필요할 듯합니다.
11강에서 cmd에서 spring shell에 $ init 하면 Fail 메세지
0
75
2
TestRestTemplate 을 통해 테스트 실행시 웹 요청 정보가 콘솔에 표시되지 않습니다.
0
85
1
섹션7. 자동구성 정보파일분리 강의 질문(@MyAutoConfiguration 붙힌 이유)
0
201
2
WebApplicationContext를 DispatcherServlet에 this로 넘기는 것
0
279
2
인프라 빈 구성 정보의 분리에서 EnableMyAutoConfiguration 질문드립니다.
0
210
2
질문드립니다.
0
232
2
spring boot 3.3.7로 학습중입니다.
0
369
2
Serverproperties 객체 생성 후 @Impor 어노테이션 사용 이유 용도
0
162
2
spring start io 에서 이제더이상 2.x버전은 지원하지 않는 것 같습니다.
1
296
2
Springboot 3.2 이상에서 파라미터 추론관련
0
913
4
binding error
0
220
3
Arrays.copyOf 메서드의 타입 세이프
1
155
2
MyOnClassCondition에 있는 matches method의 Invoke 횟수
1
233
3
인용구의 출처가 궁금합니다.
0
259
1
프로퍼티 빈의 후처리기 도입 AnnotationUtils의 사용
0
236
2
SimpleCacheConfiguration과 빈 등록
0
168
2
MyAutoConfigImportSelector 에서 생성자로 ClassLoader를 주입받을 수 있는 점
0
244
1
IntelliJ project jenerator spring initailizr
0
150
1
강의 자료 레퍼지토리에 업로드
0
216
1
강의자료
0
388
1
Hikari 라이브러리가 없으면 오류가 나는거 아닌가요
0
314
2
Tomcat 포트 프로퍼티 미설정시 랜덤 포트 설정 문의
0
476
5
@Import 로 Bean을 등록해야하는 기준이 뭔지 궁금합니다.
0
340
2
application.properties파일내 프로퍼티 이름
0
210
1





