30%
69,300원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
mybatis설정
application.properties 에 설정을안하면mapper xml이랑 mapper interface랑 파일명도 무조건 똑같아야 하나요 ?>? ============================두번째 질문만약, XML 파일을 원하는 위치에 작성하고싶다면,application.properties에 mybatis.mapper-locations=classpath:mapper/**/*.xml 으로 작성하면됩니다. 이렇게 하면 resources/mapper 를 포함한 그 하위 폴더에 있는 XML을 XML 매핑 파일로 인식한다.이경우 파일 이름은 자유롭게 설정해도 된다.라고 적혀있는데 그러면 어떤 XML Mapper가 이 어떤Mapper Interface와 연결되는지는 어떻게 아나요?XML Mapper, Mapper Interface가 여러개이면(namesapce로 구분하는건가요 ?)
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
이전 임베디드 데이터베이스와 mem:testdb
지금 강의는 mem:test:db 이건 스프링부트가 만들어주는 스키마이고, (메모리로동작?)이전 강의는 testcase 라는 스키마를 저희가 직접만들었고이 차이 인건가요 ?!? ===========================둘중 어느방식으로 테스트코드를 더 많이 사용하나요 ? 눈으로 직접 테이블을 보고싶다면 저희가 먼저 이용한 testcase 방식을 사용하면 되는건가요 ?
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
@Transactional 프로시저 TDD
안녕하세요. 프로시저에서 만약에 insert하는 경우에는 프로시저 내부에서 commit처리를 하니깐 // 테스트 해 볼 수 없나요?? 아니면 junit의 기능을 뭐 이용하면 가능한가요?? ㅜㅜ 물어볼때가 없어서 질문 남김니다.
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
spring.profiles.active=test
spring.profiles.active=test이 위치의 application.properties 는 /src/test 하위의 자바 객체를 실행할 때 동작하는 스프링설정이다. 라고 적혀있는데 관례상 spring.profiles.active=test이건src/test 하위의 자바 객체를 실행할때 쓴다고 생각하면될까요 ?test가아닌 src/main 에도 spring.profiles.active=test 설정을 할순 있으나주로 /src/test 하위의 자바 객체를 사용할때 spring.profiles.active=test 설정을 한다고 보면 될까요 ?
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
내부 트랜잭션 REQUIRES_NEW 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요.트랜잭션 전파 REQUIRES_NEW 강의를 들으면서 궁금한 점이 생겼습니다.해당 옵션을 추가하면 커넥션을 새로 생성한다고 하셨는데극단적인 상황이지만 만약 애플리케이션의 커넥션 풀이 10개인데 외부+내부 트랜잭션을 위해서 10개의 커넥션을 다 사용한다고 했을때 어떠한 이유로 마지막 커넥션에서 지연이 발생했고 다른스레드에서 커넥션 요청이 오면 커넥션풀에서 데드락이 발생할 수도 있을거 같아서 테스트를 해봤더니 예외가 발생했습니다.이런 상황은 거의 발생하지 않겠지만 혹시 내부 트랜잭션 생성시 REQUIRES_NEW 옵션을 사용 할 때 트랜잭션의 갯수 제한 같은게 있는지 궁금합니다.뒷부분 강의는 아직 듣지 않아서 해당 내용이 나왔을 수도 있지만 궁금해서 질문을 남겨봅니다.아래는 극단적인 상황을 테스트해본 코드입니다. @Test void transaction_test() throws InterruptedException { log.info("외부 트랜잭션 시작"); TransactionStatus outer = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("outer.isNewTransaction() = {}", outer.isNewTransaction()); DefaultTransactionAttribute definition = new DefaultTransactionAttribute(); definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); TransactionStatus inner1 = txManager.getTransaction(definition); TransactionStatus inner2 = txManager.getTransaction(definition); TransactionStatus inner3 = txManager.getTransaction(definition); TransactionStatus inner4 = txManager.getTransaction(definition); TransactionStatus inner5 = txManager.getTransaction(definition); TransactionStatus inner6 = txManager.getTransaction(definition); TransactionStatus inner7 = txManager.getTransaction(definition); TransactionStatus inner8 = txManager.getTransaction(definition); TransactionStatus inner9 = txManager.getTransaction(definition); TransactionStatus inner10 = txManager.getTransaction(definition); Thread.sleep(5000); log.info("내부 트랜잭션 롤백"); txManager.rollback(inner1); txManager.rollback(inner2); txManager.rollback(inner3); txManager.rollback(inner4); txManager.rollback(inner5); txManager.rollback(inner6); txManager.rollback(inner7); txManager.rollback(inner8); txManager.rollback(inner9); txManager.rollback(inner10); log.info("외부 트랜잭션 커밋"); txManager.commit(outer); }
- 해결됨스프링 DB 2편 - 데이터 접근 활용 기술
OrderService.order에서 RuntimeException이 발생했을 때, INSERT 쿼리가 실행되지 않은 이유
강의 시점으로 22:00쯤에 INSERT 쿼리가 실행되지 않은 이유를 JPA가 가진 자체 기능이라고 말씀해주셨는데요. 그 기능이 어떤 것인지 구체적으로 알고 싶어요. JPA 기본편 강의에서 언급된 내용이었나요? 아니면 JPA 책에 있는 내용인가요?@Transactional 어노테이션이 붙은 OrderService.order 메소드에서 예외가 발생하면, 롤백한다고 어렴풋이 이해하기엔 뭔가 아쉬워서 질문합니다.
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 전파 시 체크 예외를 활용한 복구 처리 관련 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]"회원 가입을 시도한 로그를 남기는데 실패하더라도 회원 가입은 유지 되어야 한다." 이 요구사항을 만족하기 위한 방법1.2 이외에 체크 예외를 활용하는 방법3 관련 문의입니다.방법1. REQUIRES_NEW로 선언해서 물리 트랜잭션 분리방법2. MemberFacade 구조를 사용하여 물리 트랜잭션 분리방법3. 체크 예외를 던져서 오류 관련 내용 커밋(9.스프링 트랜잭 션 이해 / 예외와 트랜잭션 커밋, 롤백 - 활용)질문. 체크예외를 활용하면 코드에 명시적으로 오류 상황에 대 한 처리를 할 수 있어서 개발자가 오류를 코드 레벨에서 인지할 수도 있고 오류를 받을 때 로그 상태를 저장할 수 도 있다는 장점 이 있을 것 같은데 비즈니스 적으로 의미가 있는 경우에는 체크예외를 사용하고 그 외에는 방법1,2를 선택하면 되는지 궁금합니 다. (오류 처리로 서비스 코드를 지저분하게 만들게 하고 싶지 않 는 경우 방법1,2를 사용하는지?)참고) 아래는 위 내용을 테스트 할 때 작성한 코드 입니다.체크예외를 사용하는 서비스 메소드 내용@Transactional public void joinV3(String username) throws Exception { Member member = new Member(username); Log logMessage = new Log(username); log.info("== memberRepository 호출 시작 =="); memberRepository.save(member); log.info("== memberRepository 호출 종료 =="); log.info("== logRepository 호출 시작 =="); try { logRepository.saveV2(logMessage); } catch (Exception e) { log.info("log 로그 저장에 실패했습니다. logMessage={}", logMessage.getMessage()); logRepository.saveV2(new Log("체크예외발생!!")); log.info("joinV3: 체크 예외가 발생하였습니다!!!"); } log.info("== logRepository 호출 종료 =="); }체크예외를 던지는 logRepository.saveV2 내용@Transactional public void saveV2(Log logMessage) throws Exception { log.info("log 저장"); if (logMessage.getMessage().contains("로그예외")) { log.info("log 저장시 예외 발생"); throw new Exception("예외 발생"); } em.persist(logMessage); }회원가입요청 서비스를 테스트하는 코드 내용/** * MemberService @Transactional: ON * MemberRepository @Transactional: ON * LogRepository @Transactional Checked Exception */ @Test void recoverCheckedException_success() throws Exception { // given String username = "로그예외_outerTxOn_fail"; String errorUsername = "체크예외발생!!"; // when memberService.joinV3(username); // then: member 저장, log 오류내용 저장 assertTrue(memberRepository.find(username).isPresent()); assertTrue(logRepository.find(errorUsername).isPresent()); }
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
test 하위에 있는 application.properties를 읽어오지 않는 것 같습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요! Window, Eclipse 사용하고 있습니다.testcase용 db 만들어서 testcase.mv.db 파일 생성된 것도 확인하고 jdbc:h2:tcp://localhost/~/testcase 로 접속도 잘 됩니다. test하위에 있는 application.properties도 강의에 말씀하신대로 바꾸어놓았습니다.그런데 자꾸 findItems() 테스트가 이전 강의에서 나왔던 에러가 발생합니다. testcase h2 db들어가서 select 해보면 아무것도 안나오구요,,콘솔 창은 아래와 같습니다.2022-10-07 10:04:43.159 INFO 16288 --- [ main] h.itemservice.domain.ItemRepositoryTest : The following 1 profile is active: "local" 2022-10-07 10:04:45.130 INFO 16288 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [static/index.html] 2022-10-07 10:04:45.787 INFO 16288 --- [ main] h.itemservice.domain.ItemRepositoryTest : Started ItemRepositoryTest in 2.961 seconds (JVM running for 4.344) 2022-10-07 10:04:45.791 INFO 16288 --- [ main] hello.itemservice.TestDataInit : test data init 2022-10-07 10:04:45.793 DEBUG 16288 --- [ main] o.s.jdbc.core.simple.SimpleJdbcInsert : JdbcInsert not compiled before execution - invoking compile 2022-10-07 10:04:45.803 DEBUG 16288 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource 2022-10-07 10:04:45.803 INFO 16288 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2022-10-07 10:04:45.945 INFO 16288 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.local로 가길래 테스트 클래스에서 다음과 같은 애노테이션도 추가해서 해보았는데도 위 콘솔창과 동일하게 나타납니다.@TestPropertySource(locations = "/application.properties") @SpringBootTest //@SpringBootTest(properties = "classpath:application.properties") class ItemRepositoryTest {... }혹시 몰라서 test/resources/application.properties도 삭제했다가 다시 만들어보고 이클립스도 껏다 다시 해보는데도 실패합니다.. ++ 집에 있는 맥북이랑 회사에서 사용하는 노트북이랑 깃으로 연동해서 사용하는데, 집에 와서 맥북으로 테스트해보니 잘 됩니다. 소스는 분명히 동일할탠데 맥북에서 잘 되는 것을 보니 h2 생성에 문제가 있는 것 같습니다(아마도). 화요일에 다시 회사 노트북(윈도우)로 시도해보고자 하는데 그 전에 혹시 제가 실수한 부분이나 참고할만한 부분을 답변으로 달아주신다면 참고하겠습니다,,!
- 해결됨스프링 DB 2편 - 데이터 접근 활용 기술
h2 데이터베이스 연결 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.데이터베이스로 테스트하기에서 오류발생하여 질문드립니다.기존 강의 소스코드에서 수정한 부분은 없습니다. 테스트용 db 추가하기 전까지만 해도 db 연동에 문제는 없었는데 db를 추가하니 문제가 발생했습니다.메인 db(test)는 잘 작동합니다.application.propertiesspring.profiles.active=test spring.datasource.url=jdbc:h2:localhost://Users/macbookpro/Desktop/spring/db2/testcase2 spring.datasource.username=sa spring.datasource.password= #jdbcTemplate sql log logging.level.org.springframework.jdbc=debug에러로그/Library/Java/JavaVirtualMachines/jdk-17.0.3.1.jdk/Contents/Home/bin/java -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=49462:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/macbookpro/.m2/repository/org/junit/platform/junit-platform-launcher/1.8.2/junit-platform-launcher-1.8.2.jar:/Users/macbookpro/.m2/repository/org/junit/platform/junit-platform-engine/1.8.2/junit-platform-engine-1.8.2.jar:/Users/macbookpro/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar:/Users/macbookpro/.m2/repository/org/junit/platform/junit-platform-commons/1.8.2/junit-platform-commons-1.8.2.jar:/Users/macbookpro/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/junit/lib/junit5-rt.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/junit/lib/junit-rt.jar:/Users/macbookpro/Desktop/spring/db2/itemservice-db/out/test/classes:/Users/macbookpro/Desktop/spring/db2/itemservice-db/out/test/resources:/Users/macbookpro/Desktop/spring/db2/itemservice-db/out/production/classes:/Users/macbookpro/Desktop/spring/db2/itemservice-db/out/production/resources:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter-thymeleaf/2.6.5/6cff5a773aeac16ee05e9471070eb916c496cff/spring-boot-starter-thymeleaf-2.6.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter-web/2.6.5/2fe510ed31c08e65265451a407607fe53666df0a/spring-boot-starter-web-2.6.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter-jdbc/2.6.5/6117f80dec65b70ee4fdd631d5fe28c4832de80e/spring-boot-starter-jdbc-2.6.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.18.22/9c08ea24c6eb714e2d6170e8122c069a0ba9aacf/lombok-1.18.22.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter-test/2.6.5/652bfc7d538aa666ff98f39a41282363ce85c163/spring-boot-starter-test-2.6.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter/2.6.5/26a7cd427b33d44d1166097ad31cd49880efe695/spring-boot-starter-2.6.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.thymeleaf/thymeleaf-spring5/3.0.15.RELEASE/7170e1bcd1588d38c139f7048ebcc262676441c3/thymeleaf-spring5-3.0.15.RELEASE.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.thymeleaf.extras/thymeleaf-extras-java8time/3.0.4.RELEASE/36e7175ddce36c486fff4578b5af7bb32f54f5df/thymeleaf-extras-java8time-3.0.4.RELEASE.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter-json/2.6.5/aadda8a6dd94ba4c281877ebde276b8e7c6a9700/spring-boot-starter-json-2.6.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter-tomcat/2.6.5/912894b73814637c077cde8a06312e3abde3382f/spring-boot-starter-tomcat-2.6.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework/spring-webmvc/5.3.17/d62bd1ef6a9aee74557bd59fb96030fd52cf2fc1/spring-webmvc-5.3.17.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework/spring-web/5.3.17/66fdc6bbaba2fd7242046131895353d9669a19ad/spring-web-5.3.17.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/com.zaxxer/HikariCP/4.0.3/107cbdf0db6780a065f895ae9d8fbf3bb0e1c21f/HikariCP-4.0.3.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework/spring-jdbc/5.3.17/383ae54b7171f34952ff5f19c5eadf4f579271cd/spring-jdbc-5.3.17.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-test-autoconfigure/2.6.5/53d80474bbc4e7584e17d93fc058cd2faeb97ea7/spring-boot-test-autoconfigure-2.6.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-test/2.6.5/21dcc8b330b7787cd306fbea8b9f4659db7c889f/spring-boot-test-2.6.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/com.jayway.jsonpath/json-path/2.6.0/67f565b424f7903a12d4f5b9361b11462ecacdac/json-path-2.6.0.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/jakarta.xml.bind/jakarta.xml.bind-api/2.3.3/48e3b9cfc10752fba3521d6511f4165bea951801/jakarta.xml.bind-api-2.3.3.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.assertj/assertj-core/3.21.0/27a14d6d22c4e3d58f799fb2a5ca8eaf53e6942a/assertj-core-3.21.0.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest/2.2/1820c0968dba3a11a1b30669bb1f01978a91dedc/hamcrest-2.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter/5.8.2/5a817b1e63f1217e5c586090c45e681281f097ad/junit-jupiter-5.8.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.mockito/mockito-junit-jupiter/4.0.0/b76de25bd6e5d8f7924d0536729c0076e37e9396/mockito-junit-jupiter-4.0.0.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.mockito/mockito-core/4.0.0/f5195e0c4a45716bbd2d1d29173adbd148acce3a/mockito-core-4.0.0.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.skyscreamer/jsonassert/1.5.0/6c9d5fe2f59da598d9aefc1cfc6528ff3cf32df3/jsonassert-1.5.0.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework/spring-test/5.3.17/49705efaf6243481a0a12a3e4c8722c58f054a36/spring-test-5.3.17.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/5.3.17/e709af88b40e1b3df193df3460faef44da41fd51/spring-core-5.3.17.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.xmlunit/xmlunit-core/2.8.4/35be57989ca80eefa03161b211630e319a8f36c6/xmlunit-core-2.8.4.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-autoconfigure/2.6.5/c7b562cfde36709581afdcfac128979a83e8fe7d/spring-boot-autoconfigure-2.6.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot/2.6.5/7a93e397b7af3300a9692e6be82fe7410092841c/spring-boot-2.6.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter-logging/2.6.5/70d21bfd3993dea813c68b29d623853a069a0af1/spring-boot-starter-logging-2.6.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/jakarta.annotation/jakarta.annotation-api/1.3.5/59eb84ee0d616332ff44aba065f3888cf002cd2d/jakarta.annotation-api-1.3.5.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.yaml/snakeyaml/1.29/6d0cdafb2010f1297e574656551d7145240f6e25/snakeyaml-1.29.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.thymeleaf/thymeleaf/3.0.15.RELEASE/13e3296a03d8a597b734d832ed8656139bf9cdd8/thymeleaf-3.0.15.RELEASE.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.36/6c62681a2f655b49963a5983b8b0950a6120ae14/slf4j-api-1.7.36.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.13.2/cddd9380efd4b81ea01e98be8fbdc9765a81793b/jackson-datatype-jsr310-2.13.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.module/jackson-module-parameter-names/2.13.2/c406ec37f89125d1003093d5b96d216dc967153c/jackson-module-parameter-names-2.13.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.13.2/95f59cf63c3aadc1549578254af839a9c42ae84f/jackson-datatype-jdk8-2.13.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.13.2/926e48c451166a291f1ce6c6276d9abbefa7c00f/jackson-databind-2.13.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.apache.tomcat.embed/tomcat-embed-websocket/9.0.60/a88262a55ae2c4b5404149a48122523688be341a/tomcat-embed-websocket-9.0.60.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.apache.tomcat.embed/tomcat-embed-core/9.0.60/e14045220243804544ddb168cb532f4640a220c/tomcat-embed-core-9.0.60.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.apache.tomcat.embed/tomcat-embed-el/9.0.60/46dad1a278f348ca73466e0b73132bf4c4892c06/tomcat-embed-el-9.0.60.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework/spring-context/5.3.17/756201e2e2488fc164ae15b2e561f96960162577/spring-context-5.3.17.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework/spring-aop/5.3.17/b7aaf5dd40a64b3419ff779746fcaf7bea92d29d/spring-aop-5.3.17.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework/spring-beans/5.3.17/3d9c415cb47c96a81b1267665f513e4676af53b4/spring-beans-5.3.17.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework/spring-expression/5.3.17/31746d5387cfec075a5ec01adb407d6658dd59e/spring-expression-5.3.17.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework/spring-tx/5.3.17/d41d39725d3ae613b6649094002120ab27ba532/spring-tx-5.3.17.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/net.minidev/json-smart/2.4.8/7c62f5f72ab05eb54d40e2abf0360a2fe9ea477f/json-smart-2.4.8.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/jakarta.activation/jakarta.activation-api/1.2.2/99f53adba383cb1bf7c3862844488574b559621f/jakarta.activation-api-1.2.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-params/5.8.2/ddeafe92fc263f895bfb73ffeca7fd56e23c2cce/junit-jupiter-params-5.8.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-api/5.8.2/4c21029217adf07e4c0d0c5e192b6bf610c94bdc/junit-jupiter-api-5.8.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy/1.11.22/8b4c7fa5562a09da1c2a9ab0873cb51f5034d83f/byte-buddy-1.11.22.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.11.22/2fbcf3210dfc09b42242e3b66a5281cc5b9adb80/byte-buddy-agent-1.11.22.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/com.vaadin.external.google/android-json/0.0.20131108.vaadin1/fa26d351fe62a6a17f5cda1287c1c6110dec413f/android-json-0.0.20131108.vaadin1.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.springframework/spring-jcl/5.3.17/2d3c82d3c656d0743ed927a475745ac2394ea421/spring-jcl-5.3.17.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.2.11/4741689214e9d1e8408b206506cbe76d1c6a7d60/logback-classic-1.2.11.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-to-slf4j/2.17.2/17dd0fae2747d9a28c67bc9534108823d2376b46/log4j-to-slf4j-2.17.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.slf4j/jul-to-slf4j/1.7.36/ed46d81cef9c412a88caef405b58f93a678ff2ca/jul-to-slf4j-1.7.36.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.attoparser/attoparser/2.0.5.RELEASE/a93ad36df9560de3a5312c1d14f69d938099fa64/attoparser-2.0.5.RELEASE.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.unbescape/unbescape/1.1.6.RELEASE/7b90360afb2b860e09e8347112800d12c12b2a13/unbescape-1.1.6.RELEASE.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.13.2/ec18851f1976d5b810ae1a5fcc32520d2d38f77a/jackson-annotations-2.13.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.13.2/a6a0e0620d51833feffc67bccb51937b2345763/jackson-core-2.13.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/net.minidev/accessors-smart/2.4.8/6e1bee5a530caba91893604d6ab41d0edcecca9a/accessors-smart-2.4.8.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.apiguardian/apiguardian-api/1.1.2/a231e0d844d2721b0fa1b238006d15c6ded6842a/apiguardian-api-1.1.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.junit.platform/junit-platform-commons/1.8.2/32c8b8617c1342376fd5af2053da6410d8866861/junit-platform-commons-1.8.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.opentest4j/opentest4j/1.2.0/28c11eb91f9b6d8e200631d46e20a7f407f2a046/opentest4j-1.2.0.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-core/1.2.11/a01230df5ca5c34540cdaa3ad5efb012f1f1f792/logback-core-1.2.11.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.17.2/f42d6afa111b4dec5d2aea0fe2197240749a4ea6/log4j-api-2.17.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/9.1/a99500cf6eea30535eeac6be73899d048f8d12a8/asm-9.1.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/com.h2database/h2/1.4.200/f7533fe7cb8e99c87a43d325a77b4b678ad9031a/h2-1.4.200.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-engine/5.8.2/c598b4328d2f397194d11df3b1648d68d7d990e3/junit-jupiter-engine-5.8.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.objenesis/objenesis/3.2/7fadf57620c8b8abdf7519533e5527367cb51f09/objenesis-3.2.jar:/Users/macbookpro/.gradle/caches/modules-2/files-2.1/org.junit.platform/junit-platform-engine/1.8.2/b737de09f19864bd136805c84df7999a142fec29/junit-platform-engine-1.8.2.jar com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 hello.itemservice.domain.ItemRepositoryTest 15:55:22.887 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate] 15:55:22.895 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)] 15:55:22.911 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [hello.itemservice.domain.ItemRepositoryTest] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper] 15:55:22.916 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [hello.itemservice.domain.ItemRepositoryTest], using SpringBootContextLoader 15:55:22.918 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [hello.itemservice.domain.ItemRepositoryTest]: class path resource [hello/itemservice/domain/ItemRepositoryTest-context.xml] does not exist 15:55:22.918 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [hello.itemservice.domain.ItemRepositoryTest]: class path resource [hello/itemservice/domain/ItemRepositoryTestContext.groovy] does not exist 15:55:22.918 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [hello.itemservice.domain.ItemRepositoryTest]: no resource found for suffixes {-context.xml, Context.groovy}. 15:55:22.918 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [hello.itemservice.domain.ItemRepositoryTest]: ItemRepositoryTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. 15:55:22.937 [main] DEBUG org.springframework.test.context.support.ActiveProfilesUtils - Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context.ActiveProfiles] and class [hello.itemservice.domain.ItemRepositoryTest] 15:55:22.965 [main] DEBUG org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider - Identified candidate component class: file [/Users/macbookpro/Desktop/spring/db2/itemservice-db/out/production/classes/hello/itemservice/ItemServiceApplication.class] 15:55:22.967 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration hello.itemservice.ItemServiceApplication for test class hello.itemservice.domain.ItemRepositoryTest 15:55:23.004 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [hello.itemservice.domain.ItemRepositoryTest]: using defaults. 15:55:23.004 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.event.ApplicationEventsTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener] 15:55:23.010 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@797b0699, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@5a37d3ed, org.springframework.test.context.event.ApplicationEventsTestExecutionListener@26df6e3a, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@4a3631f8, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@6b58b9e9, org.springframework.test.context.support.DirtiesContextTestExecutionListener@f14a7d4, org.springframework.test.context.transaction.TransactionalTestExecutionListener@52e7a6b2, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@29a5f4e7, org.springframework.test.context.event.EventPublishingTestExecutionListener@79c97cb, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@2d9caaeb, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@42a15bdc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@44a59da3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@27e47833, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@6f6745d6, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@27508c5d] 15:55:23.012 [main] DEBUG org.springframework.test.context.support.AbstractDirtiesContextTestExecutionListener - Before test class: context [DefaultTestContext@78a773fd testClass = ItemRepositoryTest, testInstance = [null], testMethod = [null], testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@57c03d88 testClass = ItemRepositoryTest, locations = '{}', classes = '{class hello.itemservice.ItemServiceApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@4988d8b8, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@1f59a598, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@561b6512, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@445b295b, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@424e1977, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@7a92922], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true]], class annotated with @DirtiesContext [false] with mode [null]. . ____ _ /\\ / ___'_ __ (_)_ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.6.5) 2022-10-05 15:55:23.160 INFO 1716 --- [ main] h.itemservice.domain.ItemRepositoryTest : Starting ItemRepositoryTest using Java 17.0.3.1 on MacbookPros-MacBook-Pro.local with PID 1716 (started by macbookpro in /Users/macbookpro/Desktop/spring/db2/itemservice-db) 2022-10-05 15:55:23.161 INFO 1716 --- [ main] h.itemservice.domain.ItemRepositoryTest : The following 1 profile is active: "test" 2022-10-05 15:55:23.738 INFO 1716 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [static/index.html] 2022-10-05 15:55:23.842 INFO 1716 --- [ main] h.itemservice.domain.ItemRepositoryTest : Started ItemRepositoryTest in 0.811 seconds (JVM running for 1.273) 2022-10-05 15:55:24.021 DEBUG 1716 --- [ main] o.s.jdbc.core.simple.SimpleJdbcInsert : JdbcInsert not compiled before execution - invoking compile 2022-10-05 15:55:24.024 DEBUG 1716 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource 2022-10-05 15:55:24.024 INFO 1716 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2022-10-05 15:55:24.131 INFO 1716 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2022-10-05 15:55:24.134 DEBUG 1716 --- [ main] o.s.j.c.m.TableMetaDataProviderFactory : Using GenericTableMetaDataProvider 2022-10-05 15:55:24.134 DEBUG 1716 --- [ main] o.s.j.c.metadata.TableMetaDataProvider : GetGeneratedKeys is supported 2022-10-05 15:55:24.134 DEBUG 1716 --- [ main] o.s.j.c.metadata.TableMetaDataProvider : GeneratedKeysColumnNameArray is supported for H2 2022-10-05 15:55:24.150 INFO 1716 --- [ main] o.s.j.c.metadata.TableMetaDataProvider : Unable to locate table meta-data for 'item': column names must be provided 2022-10-05 15:55:24.153 DEBUG 1716 --- [ main] o.s.j.c.metadata.TableMetaDataContext : Unable to locate non-key columns for table 'item' so an empty insert statement is generated 2022-10-05 15:55:24.153 DEBUG 1716 --- [ main] o.s.jdbc.core.simple.SimpleJdbcInsert : Compiled insert object: insert string is [INSERT INTO item () VALUES()] 2022-10-05 15:55:24.153 DEBUG 1716 --- [ main] o.s.jdbc.core.simple.SimpleJdbcInsert : JdbcInsert for table [item] compiled 2022-10-05 15:55:24.153 DEBUG 1716 --- [ main] o.s.jdbc.core.simple.SimpleJdbcInsert : The following parameters are used for call INSERT INTO item () VALUES() with: [] 2022-10-05 15:55:24.154 DEBUG 1716 --- [ main] o.s.jdbc.core.JdbcTemplate : Executing SQL update and returning generated keys 2022-10-05 15:55:24.154 DEBUG 1716 --- [ main] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL statement 2022-10-05 15:55:24.154 DEBUG 1716 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource 2022-10-05 15:55:24.154 DEBUG 1716 --- [ main] o.s.jdbc.core.simple.SimpleJdbcInsert : Using generated keys support with array of column names. 2022-10-05 15:55:24.196 DEBUG 1716 --- [ main] o.s.jdbc.support.SQLErrorCodesFactory : Looking up default SQLErrorCodes for DataSource [com.zaxxer.hikari.HikariDataSource@4fe8f2ae] 2022-10-05 15:55:24.196 DEBUG 1716 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource 2022-10-05 15:55:24.196 DEBUG 1716 --- [ main] o.s.jdbc.support.SQLErrorCodesFactory : SQL error codes for 'H2' found 2022-10-05 15:55:24.196 DEBUG 1716 --- [ main] o.s.jdbc.support.SQLErrorCodesFactory : Caching SQL error codes for DataSource [com.zaxxer.hikari.HikariDataSource@4fe8f2ae]: database product name is 'H2' 2022-10-05 15:55:24.197 DEBUG 1716 --- [ main] s.j.s.SQLErrorCodeSQLExceptionTranslator : Translating SQLException with SQL state '42S02', error code '42102', message [Table "ITEM" not found; SQL statement: INSERT INTO item () VALUES() [42102-200]] for task [PreparedStatementCallback] org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar []; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEM" not found; SQL statement: INSERT INTO item () VALUES() [42102-200] at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:991) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.executeInsertAndReturnKeyHolderInternal(AbstractJdbcInsert.java:433) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.executeInsertAndReturnKeyInternal(AbstractJdbcInsert.java:413) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.doExecuteAndReturnKey(AbstractJdbcInsert.java:382) at org.springframework.jdbc.core.simple.SimpleJdbcInsert.executeAndReturnKey(SimpleJdbcInsert.java:132) at hello.itemservice.repository.jdbctemplate.JdbcTemplateItemRepositoryV3.save(JdbcTemplateItemRepositoryV3.java:45) at hello.itemservice.domain.ItemRepositoryTest.updateItem(ItemRepositoryTest.java:47) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEM" not found; SQL statement: INSERT INTO item () VALUES() [42102-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:453) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.message.DbException.get(DbException.java:181) at org.h2.command.Parser.readTableOrView(Parser.java:7628) at org.h2.command.Parser.readTableOrView(Parser.java:7599) at org.h2.command.Parser.parseInsert(Parser.java:1747) at org.h2.command.Parser.parsePrepared(Parser.java:954) at org.h2.command.Parser.parse(Parser.java:843) at org.h2.command.Parser.parse(Parser.java:815) at org.h2.command.Parser.prepareCommand(Parser.java:738) at org.h2.engine.Session.prepareLocal(Session.java:657) at org.h2.engine.Session.prepareCommand(Session.java:595) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1235) at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:76) at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1217) at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:372) at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.prepareStatementForGeneratedKeys(AbstractJdbcInsert.java:525) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.lambda$executeInsertAndReturnKeyHolderInternal$0(AbstractJdbcInsert.java:435) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:649) ... 76 more 2022-10-05 15:55:24.207 DEBUG 1716 --- [ main] o.s.jdbc.core.simple.SimpleJdbcInsert : The following parameters are used for call INSERT INTO item () VALUES() with: [] 2022-10-05 15:55:24.207 DEBUG 1716 --- [ main] o.s.jdbc.core.JdbcTemplate : Executing SQL update and returning generated keys 2022-10-05 15:55:24.207 DEBUG 1716 --- [ main] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL statement 2022-10-05 15:55:24.207 DEBUG 1716 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource 2022-10-05 15:55:24.207 DEBUG 1716 --- [ main] o.s.jdbc.core.simple.SimpleJdbcInsert : Using generated keys support with array of column names. 2022-10-05 15:55:24.208 DEBUG 1716 --- [ main] s.j.s.SQLErrorCodeSQLExceptionTranslator : Translating SQLException with SQL state '42S02', error code '42102', message [Table "ITEM" not found; SQL statement: INSERT INTO item () VALUES() [42102-200]] for task [PreparedStatementCallback] org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar []; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEM" not found; SQL statement: INSERT INTO item () VALUES() [42102-200] at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:991) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.executeInsertAndReturnKeyHolderInternal(AbstractJdbcInsert.java:433) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.executeInsertAndReturnKeyInternal(AbstractJdbcInsert.java:413) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.doExecuteAndReturnKey(AbstractJdbcInsert.java:382) at org.springframework.jdbc.core.simple.SimpleJdbcInsert.executeAndReturnKey(SimpleJdbcInsert.java:132) at hello.itemservice.repository.jdbctemplate.JdbcTemplateItemRepositoryV3.save(JdbcTemplateItemRepositoryV3.java:45) at hello.itemservice.domain.ItemRepositoryTest.save(ItemRepositoryTest.java:36) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEM" not found; SQL statement: INSERT INTO item () VALUES() [42102-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:453) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.message.DbException.get(DbException.java:181) at org.h2.command.Parser.readTableOrView(Parser.java:7628) at org.h2.command.Parser.readTableOrView(Parser.java:7599) at org.h2.command.Parser.parseInsert(Parser.java:1747) at org.h2.command.Parser.parsePrepared(Parser.java:954) at org.h2.command.Parser.parse(Parser.java:843) at org.h2.command.Parser.parse(Parser.java:815) at org.h2.command.Parser.prepareCommand(Parser.java:738) at org.h2.engine.Session.prepareLocal(Session.java:657) at org.h2.engine.Session.prepareCommand(Session.java:595) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1235) at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:76) at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1217) at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:372) at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.prepareStatementForGeneratedKeys(AbstractJdbcInsert.java:525) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.lambda$executeInsertAndReturnKeyHolderInternal$0(AbstractJdbcInsert.java:435) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:649) ... 76 more 2022-10-05 15:55:24.212 DEBUG 1716 --- [ main] o.s.jdbc.core.simple.SimpleJdbcInsert : The following parameters are used for call INSERT INTO item () VALUES() with: [] 2022-10-05 15:55:24.212 DEBUG 1716 --- [ main] o.s.jdbc.core.JdbcTemplate : Executing SQL update and returning generated keys 2022-10-05 15:55:24.212 DEBUG 1716 --- [ main] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL statement 2022-10-05 15:55:24.212 DEBUG 1716 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource 2022-10-05 15:55:24.212 DEBUG 1716 --- [ main] o.s.jdbc.core.simple.SimpleJdbcInsert : Using generated keys support with array of column names. 2022-10-05 15:55:24.213 DEBUG 1716 --- [ main] s.j.s.SQLErrorCodeSQLExceptionTranslator : Translating SQLException with SQL state '42S02', error code '42102', message [Table "ITEM" not found; SQL statement: INSERT INTO item () VALUES() [42102-200]] for task [PreparedStatementCallback] org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar []; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEM" not found; SQL statement: INSERT INTO item () VALUES() [42102-200] at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:991) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.executeInsertAndReturnKeyHolderInternal(AbstractJdbcInsert.java:433) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.executeInsertAndReturnKeyInternal(AbstractJdbcInsert.java:413) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.doExecuteAndReturnKey(AbstractJdbcInsert.java:382) at org.springframework.jdbc.core.simple.SimpleJdbcInsert.executeAndReturnKey(SimpleJdbcInsert.java:132) at hello.itemservice.repository.jdbctemplate.JdbcTemplateItemRepositoryV3.save(JdbcTemplateItemRepositoryV3.java:45) at hello.itemservice.domain.ItemRepositoryTest.findItems(ItemRepositoryTest.java:68) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEM" not found; SQL statement: INSERT INTO item () VALUES() [42102-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:453) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.message.DbException.get(DbException.java:181) at org.h2.command.Parser.readTableOrView(Parser.java:7628) at org.h2.command.Parser.readTableOrView(Parser.java:7599) at org.h2.command.Parser.parseInsert(Parser.java:1747) at org.h2.command.Parser.parsePrepared(Parser.java:954) at org.h2.command.Parser.parse(Parser.java:843) at org.h2.command.Parser.parse(Parser.java:815) at org.h2.command.Parser.prepareCommand(Parser.java:738) at org.h2.engine.Session.prepareLocal(Session.java:657) at org.h2.engine.Session.prepareCommand(Session.java:595) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1235) at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:76) at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1217) at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:372) at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.prepareStatementForGeneratedKeys(AbstractJdbcInsert.java:525) at org.springframework.jdbc.core.simple.AbstractJdbcInsert.lambda$executeInsertAndReturnKeyHolderInternal$0(AbstractJdbcInsert.java:435) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:649) ... 76 more 2022-10-05 15:55:24.220 INFO 1716 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2022-10-05 15:55:24.221 INFO 1716 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. Process finished with exit code 255
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
테스트 코드 작성의 예
안녕하세요 강사님!혹시 테스트 코드는 제가 구현하는 모든 기능들을 바탕으로 만들어야 하는 걸까요?아니면 뭔가를 검증하는 로그인, 회원가입 등에만 만들면 되는 걸까요?강의를 듣다보니 테스트도 관심이 생기는데 정확히 어떤 액션일 때만 만들어야 좋을지 모르겠어서 이렇게 문의 남깁니다. 감사합니다!
- 해결됨스프링 DB 2편 - 데이터 접근 활용 기술
프록시와 스프링 빈에 대한 질문입니다.
강의 회차 : 트랜잭션 적용 확인안녕하세요 강의를 보다가 궁금한게 생겨서 질문 드립니다.일단 이번 강의에서 클래스 안에 @Transactional이 하나라도 있으면 트랜잭션 AOP가 프록시를 만들어서 basicService$$CGLIB를 스프링 컨테이너에 등록된다고 하였는데, 스프링 핵심 원리 강의에서도 스프링 빈에 객체를 등록하면 "빈 이름$$CGLIB"가 등록되었는데, 스프링 핵심 원리에서 보았던 스프링 컨테이너에 등록된 빈 하고 이번 강의에서 나온 프록시가 스프링 빈에 등록되는 것하고 같은 개념인지 궁금합니다.
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
spring Exception REQUIRES_NEW 질문 드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강사님 덕분에 좋은 수업 잘 듣고 있습니다운영하는 플랫폼 api 수신 처리 로직 구현중 구현하고 싶은 부분이 마음대로 안되어서여쭤봅니다//█====for Loop //█====서비스로직 01 @Transactional 원본 호출 메서드 UnexpectedRollbackException //█====서비스 로직 02 @Transactional(propagation=Propagation.REQUIRES_NEW) 전파옵션 REQUIRES_NEW 상세 메서드 분리 SQLException db 트리거 에러메세지(=>RuntimeException) 최초 for Loop 에서 각 Loop 레코드(서비스로직 01) 마다 상세메서드(서비스로직 02) 전파옵션 REQUIRES_NEW 메서드에서발생한 Exception 원인을 상위로 던지고 싶어서Map 담아서 리턴을 해보더라도 테스트 해보니 원래는 서비스로직 02 에서 발생한 SQLException db 트리거 에러메세지(=>RuntimeException)이지만, 스프링이 감싼 AOP 때문인지상위(서비스로직 01 )쪽에서 map으로 받는 Exception은 org.springframework.transaction.UnexpectedRollbackException 로 변환되어서 넘어옵니다 오리지날 발생한(서비스 로직 02) Exception 원인 SQLException db 트리거 에러메세지(=>RuntimeException) 을 상위(서비스로직 01) 으로 담아서 받아 올 수 있는 방법이 혹시 있을까 질문 드립니다
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
JPA Exception 핸들링 질문 드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 강사님 수업 감사히 듣고 있습니다.. jpa 사용하면서 동시성 제어 문제를비관적락과 + db 트리거를 사용해서동시에 오더 생성시 저장 -> 채번(비관적락) + 디테일Insert(db트리거 체크) -> JpaSystemException(원인:SQLException db 트리거)을 발생 시킵니다 서비스로직 처리시 어플리케이션 에러가 발생하면처리 히스토리 로그 테이블에jpa에서 벹어낸 에러 정보( db 트리거에러 메세지) = detailMessage 값을 가져와서 히스토리에 넣고 싶습니다JpaSystemException SQLException detailMessage 아래 첨부 이미지와 같이디버깅모드에 담긴 detailMessage자바코드로 어떤식으로 가져와야 하는지모르겠어서 문의 드립니다
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
동시간대 동일메세지 api 수신시 중복오더번호
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? 아니오)[질문 내용]안녕하세요 강사님저희회사 환경은 스프링 + jpa + 오라클19c 환경입니니다창고시스템에서 -> 메인 플랫폼 시스템으로 입/출고 신규 오더 를 요청합니다이럴때 메인 플랫폼시스템에서입출고 오더에 대한 json api 대량 메세지수신시 동시간대 같은 동일한 json 요청 메세지가 오는 경우 동일하게 오더번호가 채번되는 경우가 발생하고 있습니다이런 경우 기술적으로 동일한 오더번호 채번을 막기위해서 어떤식으로 처리를 해야 하는지조언을 구합니다 사정상 저희플랫폼 소스를 못올리고 질문드려 죄송합니다인터벌을 줘야하는지, 한쓰레드가 끝날때까지대기하게했다가 다음api 호출을 할수있게 하는방법은 없는지,채번로직을 어떻게 바꿔야 하는건지...
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
mysql wait_timeout 관련 질문입니다.
안녕하세요. 실무에서 트랜잭션과 관련해서해결할 이슈가 있어서 급하게 영한님 강의를 듣고 있는데요.일단 제가 해결하고자 하는 이슈는 다음과 같습니다.대용량의 파일 데이터를 읽어서 디비에 반영해야 하는데디비의 wait_timeout 시간보다 트랜잭션이 길어져서타임아웃이 나서 롤백이 되어버립니다.그래서 영한님 강의 듣고 REQUIRES_NEW 로 다른 트랜잭션을 만들어서 테스트를 해보는 중인데요.자식 트랜잭션은 성공을 하지만 부모 트랜잭션은 타임아웃으로 롤백이 되는거 같습니다.아마 강의 내용처럼 Suspending current transaction이것 때문에 부모 트랜잭션이 대기 상태에 빠져 자식 트랜잭션을 수행후 다시 부모 트랜잭션이 커밋 하려는 시점에 타임아웃이 나는거 같은데... 이런 경우에 어떻게 처리 할 수 있을까요?그리고 강의를 듣다보니 REQUIRES_NEW 로 트랜잭션을 생성하는건 결국 커넥션풀을 하나씩 사용하는거라 새로 트랜잭션을 계속 생성하는것도 좋은 방법은 아니라는 생각이 드는데요. 다른 대안이 있을지 궁금합니다.파일의 크기에 따라 일정 정도의 크기로 잘라서 REQUIRES_NEW 로 새로운 트랜잭션을 계속 만들려고 생각했는데 그러면 커넥션풀을 너무 많이 사용하는건 아닐까 하는 생각이 듭니다. 그리고 만약 각각의 트랜잭션으로 분리를 한다면 하나의 트랜잭션에서 에러가 났을 경우 각각 다른 트랜잭션인데 이걸 다시 전부 롤백할 수 있는 방법이 수동으로 하는거 말고는 없을까요?두서 없이 질문을 드렸는데 정리해보면 다음과 같습니다.파일 데이터를 읽어서 디비에 반영시 디비 wait_timeout 발생REQUIRES_NEW 로 새 트랜잭션 만들어서 디비 반영비 자식 트랜잭션 반영 성공, 부모 트랜잭션 타임아웃 롤백파일 크기에 따라 일정 정도로 잘라서 REQUIRES_NEW 로 새 트랜잭션을 계속 만들어서 디비 반영하는건 커넥션풀을 파일 크기에 따라 너무 많이 먹을거 같은데 다른 대안이 있을지?만약 각각의 트랜잭션으로 분리해서 반영하다가 하나의 트랜잭션에서 에러가 발생했을 경우 모든 트랜잭션을 롤백할 방법이 있을지?
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
JpaItemRepositoryV2 예제에서 update 질문
예제 소스에서 update 기능에서 단순히 set메서드만 수행하면 DB에 저장이 되지 않는거 같습니다. repository.save까지 호출해야 되는게 아닌지요? Item findItem = repository.findById(itemId).orElseThrow(); findItem.setItemName(updateParam.getItemName()); findItem.setPrice(updateParam.getPrice()); findItem.setQuantity(updateParam.getQuantity()); repository.save(findItem);
- 해결됨스프링 DB 2편 - 데이터 접근 활용 기술
질문입니다!
강의에서는 Jparepository를 상속받는 ItemRepositoryV2 와 ItemQueryRepository 2개를 만들어서 ItemService에서 두 개의 리포지토리를 이용했는데요 이걸 하나로 만들 수는 없나요? (JpaRepository를 상속 받고 거기 안에서 QueryDSL을 사용 하면 안되나요?) 만약 가능한데 나누신거라면 나눈 이유가 궁금합니다 QItem은 무엇인가요 ? 아니면 @Entity가 붙은 클래스앞에 Q를 붙여서 엔티티마다 생성되는건가요 ? 엔티티들의 컨테이너라서 QItem.item 이렇게 사용 하는 것인지 헷갈립니다 ( A 클래스에 @Entity, B클래스에 @Entity가 붙어있다면 QA, QB 가 생성되는 것인가요? 아니면 QItem.A , QItem.b 이렇게 사용하게 되는 것인가요?
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
커밋 순서를 바꾸면 안 되나요?
log.info("외부 트랜잭션 커밋"); txManager.commit(outer); log.info("내부 트랜잭션 커밋"); txManager.commit(inner); 논리 트랜잭션들이 모두 커밋돼야 물리 트랜잭션이 커밋돼야합니다. 그런데, 위처럼 순서를 바꿔서 진행해봤는데 외부 트랜잭션 커밋 로그 이후 바로 내부 트랜잭션 커밋 로그가 나오지 않고 데이터베이스에 접근하는것 같은 로그가 나옵니다. 내부 - 외부 순서대로 커밋해야 정상적으로 작동하는건가요? 감사합니다.
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
Qitem이 무엇인가요 ?
@Entity 가 붙어있는 클래스(엔티티) 를 인식하고 QueryDSL 에서 알아서 만들어주는 객체인가요 ?save, update, findById 메쏘드에서는 item을 사용하였는데 findAll에서만 Qitem을 사용한 이유도 궁금합니다따로 설정을 하지 않았는데 Qitem을 item 다루듯이 사용할 수 있는게 이해가 잘 가지 않아 질문 남기게 되었습니다
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
JpaItemRepositoryV2 질문입니다
ItemService는 ItemRepository에 의존하고 있기 때문에 JpaItemRepositor2를 쓰면 소스를 다시 작성해야하기 때문에 새로운 구현체를 만들어야하므로 V2를 만들었다고 알고 있는데요 그러면 결국 JpaitemRepositoryV2 구현체를 만들 때 똑같이 소스를 작성해야돼서 조삼모사 아닌가요?? 어떤 장점이 있는지가 궁금합니다