build.gradle
에 h2, jpa 추가application.properties
에 h2, jpa 관련 설정 추가@Entity
붙이고 JPA entity 설정해주기@transactional
추가SpringConfig.java
파일 생성 후 @Configuration
어노테이션 작성springConfig
파일에서 repo 바꾸고 빈 등록동료분 dataSource 연결 에러 발생
2022-08-18 10:43:58.788 ERROR 8108 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: java.lang.IllegalArgumentException: No DataSource specified] with root cause
java.lang.IllegalArgumentException: No DataSource specified ...
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:103) ~[spring-jdbc-5.3.22.jar:5.3.22]
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) ~[spring-jdbc-5.3.22.jar:5.3.22]
at hello.hellospring.repository.JdbcMemberRepository.getConnection(JdbcMemberRepository.java:122) ~[main/:na]
at hello.hellospring.repository.JdbcMemberRepository.findAll(JdbcMemberRepository.java:78) ~[main/:na]
at hello.hellospring.service.MemberService.findMember(MemberService.java:46) ~[main/:na]
at hello.hellospring.controller.MemberController.list(MemberController.java:46) ~[main/:na]
SpringConfig
에서 dataSource
를 주입해주어야 하는데 이 부분에서 오류가 나면 아래와 같이 DataSourceUtils, repository, service, controller 줄줄이 에러가 난다고 뜬다.
인프런에도 비슷한 에러가 있었는데 그 분은 dataSource 변수명을 DataSource로 잘못 써서 연결이 안 된거였다.
동료분은 dataSource 주입하는 생성자를 통째로 빠뜨림...!
org.opentest4j.AssertionFailedError: Expected java.lang.IllegalStateException to be thrown, but nothing was thrown
user2.setName()
을 빠뜨림// test.java
@Test
void 중복회원예외 () {
// given
User user = new User();
user.setName("aaa");
User user2 = new User();
user2.setName("aaa"); //user.setName("aaa"); 이래서 에러남
// when
userService.join(user);
// then
IllegalStateException e = assertThrows(IllegalStateException.class, () -> userService.join(user2));
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 이름입니다.");
}
jdbcTemplate
은 건너뛰고 바로 jpa (jpql 작성)으로 넘어갔음merge()
나 executeUpdate()
를 사용해야 하는 이유는 이해 못했지만 내가 원하는 대로 작동은 잘 된다!// JpaPostRepository.java
@Override
public Post update(Post post) {
post.setUpdatedAt(new Date());
em.merge(post);
return post;
}
@Override
public void delete(Long postId) {
em.createQuery("delete from Post p where p.postId = :postId")
.setParameter("postId", postId)
.executeUpdate();
}
BNPL (Buy Now Pay Later)
: 온라인 할부금융 업체. 온라인에서 저렴하고 쉽게 제공