개발자의 서재
Chaptor.02 - JPA Entity생성 + h2 console 에서 확인 본문
SpringBootProject/SringBoot_JWT_RestApi
Chaptor.02 - JPA Entity생성 + h2 console 에서 확인
ironmask431 2022. 4. 1. 22:49
<진행할 것>
- datasource, JPA 설정
- entity 생성,
- h2 console 결과확인
1. application.properties > yaml 파일로수정 > 내용입력
spring:
h2:
console:
enabled: true
datasources:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: sa
password:
jpa:
database-platform: org.hibernate.dialect.H2Dialect
hibernate:
ddl-auto: create-drop
properties:
hibernate:
#콘솔창에서 sql 보기위한 설정
format_sql: true
show_sql: true
logging:
level:
com.leesh: debug
2. entity 패키지 생성
Authority.java
import lombok.*;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* 권한 entity
*/
@Entity
@Table(name="authority")
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Authority {
@Id
@Column(name="authority_name", length = 50)
private String authorityName;
}
User.java
package com.leesh.springbootjwttutorial.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.*;
import javax.persistence.*;
import java.util.Set;
/**
* 유저 entity
*/
@Entity
@Table(name="user")
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Id
@Column(name="user_id")
@GeneratedValue(strategy = GenerationType.IDENTITY) // auto increment
private Long userId;
@Column(name="email", length = 50, unique = true)
private String email;
@JsonIgnore //JSON 리턴 시 생략됨.
@Column(name="password", length = 100)
private String password;
@JsonIgnore
@Column(name="activated")
private boolean activated;
@ManyToMany //테이블간 다대다 관계
@JoinTable(
name="user_authority",
joinColumns = {@JoinColumn(name="user_id", referencedColumnName = "user_id")},
inverseJoinColumns = {@JoinColumn(name="authority_name", referencedColumnName = "authority_name")}
)
private Set<Authority> authorities;
}
3. resources/data.sql 생성 > 서버가 실행될때마다 data.sql의 쿼리문들이 실행됨.
INSERT INTO USER (USER_ID, EMAIL, PASSWORD, ACTIVATED)
VALUES (1, 'admin@gmail.com', '$2a$08$lDnHPz7eUkSi6ao14Twuau08mzhWrL4kyZGGU5xfiGALO/Vxd5DOi', 1);
INSERT INTO AUTHORITY (AUTHORITY_NAME) VALUES ('ROLE_USER');
INSERT INTO AUTHORITY (AUTHORITY_NAME) VALUES ('ROLE_ADMIN');
INSERT INTO USER_AUTHORITY (USER_ID, AUTHORITY_NAME) VALUES (1, 'ROLE_USER');
INSERT INTO USER_AUTHORITY (USER_ID, AUTHORITY_NAME) VALUES (1, 'ROLE_ADMIN');
4. h2-console (브라우저에서 h2 db확인)을 사용하기 위해서 SecurityConfig.java 파일에 코드추가
//h2-console, favicon 시큐리티에 필터에 걸리지않도록 설정
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers(
"/h2-console/**", //h2 console
"/favicon.ico"
);
}
5. 서버 구동 > 에러발생
https://zzang9ha.tistory.com/371 참고
USER 테이블에 insert 시 USER not found 에러. h2 테이블이 생성되기 전에 data.sql 이 실행되는 듯하다.
application.yaml 에 코드 추가하여 해결
#data.sql을 h2 테이블이 생성된 후 실행되도록 함.
jpa.defer-datasource-initialization: true
6. 구동 후 /h2-console 접속 + 로그인시 오류
https://www.youtube.com/watch?v=dlNu7rB7emQ 참고하여 수정
구동시 콘솔 창에서 jdbc:h2 로 검색
해당 url을 전체복사 한다음 h2 로그인창의 JDBC URL에 입력 한 후 로그인> 정상로그인 됨.
7. h2-console에서 확인 결과 테이블 생성, 데이터 입력 정상 확인함.
'SpringBootProject > SringBoot_JWT_RestApi' 카테고리의 다른 글
Chaptor.06 - 상품,주문 entity, repository, dto, servcie, controller (API) 추가 (0) | 2022.04.03 |
---|---|
Chaptor.05 - 회원가입 API 생성 , 권한검증 테스트 (0) | 2022.04.03 |
Chaptor.04 - DTO, Repository, 로그인API 생성 (0) | 2022.04.03 |
Chaptor.03 - JWT코드, Security 설정 추가 (0) | 2022.04.03 |
Chaptor.01 - 스프링부트 기초세팅 + 스프링 시큐리티 설정 + Hello API 생성 (0) | 2022.04.01 |
Comments