반응형
jpa 쿼리가 보이는 설정을 하는건 크게 2가지가 있다.
1) show-sql 을 true로 설정하는 방법
2) p6spy를 이용한 로깅(외부라이브러리).
1번은 파라미터 안에 무엇이 들어있는지 알 순 없고 바인딩쿼리만 로그에 찍힌다.
2번은 추가설정을 좀 해주어야 한다.
1)
show-sql을 사용하는 방법은 간단하다. application.properties 에다 다음이 설정을 추가하면 된다.
spring.jpa.show-sql=false # 여기
spring.jpa.properties.hibernate.format_sql=false # 여기
spring.jpa.hibernate.ddl-auto=none
spring.jpa.hibernate.generate-ddl=true
spring.jpa.hibernate.database=mysql
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.default_batch_fetch_size = 1000
format_sql을 같이 설정하면 SQL문이 포멧되어 로그에 찍힌다.(아래)
select
member0_.id as id1_29_,
member0_.email as email4_29_,
member0_.nickname as nickname6_29_,
from
member member0_
where
member0_.id=?
2)
build.gradle에 다음을 추가한다
dependencies {
...
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'
...
}
application.properties 에 다음을 추가한다
기본값이 true 이니 운영으로 배포할 땐 false로 하기로 하자.
# jpa query, parameter 로그
decorator.datasource.p6spy.enable-logging=true
decorator.datasource.p6spy.multiline=true
설정하는 파일을 열어보면 다음과 같다.
@Getter
@Setter
public class P6SpyProperties {
/**
* Enables logging JDBC events.
*
* @see P6LogFactory
*/
private boolean enableLogging = true;
/**
* Enables multiline output.
*/
private boolean multiline = true;
/**
* Logging to use for logging queries.
*/
private P6SpyLogging logging = P6SpyLogging.SLF4J;
/**
* Name of log file to use (only for logging=file).
*/
private String logFile = "spy.log";
/**
* Custom log format.
*/
private String logFormat;
public enum P6SpyLogging {
SYSOUT,
SLF4J,
FILE
}
}
실행해보면 다음과 같이 파라미터가 자동 바인딩 되어 로그로 나온다.
select member0_.id as id1_29_, member0_.birthday as birthday2_29_, member0_.country as country3_29_, member0_.email as email4_29_, member0_.gender as gender5_29_, member0_.nickname as nickname6_29_, member0_.social_id as social_i7_29_, member0_.social_type as social_t8_29_
from member member0_ where member0_.id=1;
# 2021.02.23 추가
dataSource가 Bean으로 등록되어 있지 않으면 p6spy가 자동으로 h2를 잡고 설정된 Datasource를 잡지못한다. 반드시 Bean으로 생성되어야 한다.
끝.
반응형
'공부 > 프로그래밍' 카테고리의 다른 글
[java] lambda 를 이용한 GroupBy mulitiple field 사용하기 (1) | 2021.01.20 |
---|---|
[retrofit, gson] Expected BEGIN_OBJECT but was STRING 에러 해결(String -> LocalDate) (1) | 2021.01.18 |
[axios, react, redux] 서버통신 시 로딩바 띄우기 (0) | 2021.01.13 |
[springboot] 자주쓰는 정보 파라미터에 설정해 자동 주입하여 받기(resolver 사용) (0) | 2021.01.11 |
[aws] aws cli로 s3 파일 삭제(console에서 파일삭제 실패 시-파일명 한글일 경우 실패함) (1) | 2021.01.08 |
댓글