[SQL] 봄의 JdbcTemplate의 기본 SQL을보고?
SQL봄의 JdbcTemplate의 기본 SQL을보고?
나는 JdbcTemplate을하고하는 NamedParameterJdbcTemplate의 경이로움에 대해 배우고 있어요. 내가 무엇을보고 같은 I,하지만 실행이 끝나는 것을 기본 SQL을 볼 수있는 쉬운 방법은 무엇입니까? 나는 (예를 들어, 디버그하기 위해 외부 도구에서 생성 된 SQL을) 디버그 목적으로이를보고 싶습니다.
해결법
-
==============================
1.봄 문서는이 DEBUG 수준에서 로그인 한 말한다 :
봄 문서는이 DEBUG 수준에서 로그인 한 말한다 :
XML 측면에서, 당신은 같은 로거 뭔가를 구성해야합니다 :
<category name="org.springframework.jdbc.core.JdbcTemplate"> <priority value="debug" /> </category>
이 주제는하지만 한 달 전에 여기에서 논의되었다 그것은 쉽게 최대 절전 모드에서와 같이 작동시킬 수 없습니다 보인다 및 / 또는 예상 된 정보를 반환하지 않았습니다 : 각 P6Spy로를 사용하는 제안에 따라 스프링 JDBC는 log4j에와 SQL을이 항목을 기록하지 않습니다 이는 또한이 문서에 따라 봄에 통합 할 수 있습니다.
-
==============================
2.org.springframework.jdbc-3.0.6.RELEASE.jar와 나를 위해이 작동합니다. 나는 봄 문서에서이 어디 (어쩌면 난 그냥 게으른를) 찾을 수 없습니다하지만 난 TRACE 레벨이 마법을했다는 것을 (시행 착오를) 발견했다.
org.springframework.jdbc-3.0.6.RELEASE.jar와 나를 위해이 작동합니다. 나는 봄 문서에서이 어디 (어쩌면 난 그냥 게으른를) 찾을 수 없습니다하지만 난 TRACE 레벨이 마법을했다는 것을 (시행 착오를) 발견했다.
나는의 log4j를 구성하는 SLF4J (1.6.4) 및 속성 파일과 함께 log4j에-1.2.15을 사용하고 있습니다 :
log4j.logger.org.springframework.jdbc.core = TRACE
이 표시 SQL 문이 같은 바인딩 매개 변수를 모두 :
Executing prepared SQL statement [select HEADLINE_TEXT, NEWS_DATE_TIME from MY_TABLE where PRODUCT_KEY = ? and NEWS_DATE_TIME between ? and ? order by NEWS_DATE_TIME] Setting SQL statement parameter value: column index 1, parameter value [aaa], value class [java.lang.String], SQL type unknown Setting SQL statement parameter value: column index 2, parameter value [Thu Oct 11 08:00:00 CEST 2012], value class [java.util.Date], SQL type unknown Setting SQL statement parameter value: column index 3, parameter value [Thu Oct 11 08:00:10 CEST 2012], value class [java.util.Date], SQL type unknown
확실하지 SQL 형 알 수없는 약하지만 우리가 여기 무시할 수 추측
(당신이 바인딩 된 매개 변수 값에 관심이하지 않는 경우 즉,) 그냥 SQL의 경우 DEBUG는 충분합니다.
-
==============================
3.매개 변수 값은 TRACE 수준에 인쇄 될 것으로 보인다. 이것은 나를 위해 일한 :
매개 변수 값은 TRACE 수준에 인쇄 될 것으로 보인다. 이것은 나를 위해 일한 :
log4j.logger.org.springframework.jdbc.core.JdbcTem plate=DEBUG, file log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils=TRACE, file
콘솔 출력 :
02:40:56,519 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 1, parameter value [Tue May 31 14:00:00 CEST 2005], value class [java.util.Date], SQL type unknown 02:40:56,528 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 2, parameter value [61], value class [java.lang.Integer], SQL type unknown 02:40:56,528 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 3, parameter value [80], value class [java.lang.Integer], SQL type unknown
-
==============================
4.나는 봄 부팅 응용 프로그램이 줄을 사용 :
나는 봄 부팅 응용 프로그램이 줄을 사용 :
logging.level.org.springframework.jdbc.core = TRACE
이 방법을 아주 보편적이고 나는 보통 내 응용 프로그램 내 다른 클래스를 사용합니다.
-
==============================
5.이 log4j2 및 XML 매개 변수와 함께 나를 위해 일한 :
이 log4j2 및 XML 매개 변수와 함께 나를 위해 일한 :
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="debug"> <Properties> <Property name="log-path">/some_path/logs/</Property> <Property name="app-id">my_app</Property> </Properties> <Appenders> <RollingFile name="file-log" fileName="${log-path}/${app-id}.log" filePattern="${log-path}/${app-id}-%d{yyyy-MM-dd}.log"> <PatternLayout> <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n </pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> </Policies> </RollingFile> <Console name="console" target="SYSTEM_OUT"> <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" /> </Console> </Appenders> <Loggers> <Logger name="org.springframework.jdbc.core" level="trace" additivity="false"> <appender-ref ref="file-log" /> <appender-ref ref="console" /> </Logger> <Root level="info" additivity="false"> <appender-ref ref="file-log" /> <appender-ref ref="console" /> </Root> </Loggers> </Configuration>
결과 콘솔 및 파일 로그했다 :
JdbcTemplate - Executing prepared SQL query JdbcTemplate - Executing prepared SQL statement [select a, b from c where id = ? ] StatementCreatorUtils - Setting SQL statement parameter value: column index 1, parameter value [my_id], value class [java.lang.String], SQL type unknown
그냥 복사 / 붙여 넣기
HTH
-
==============================
6.의 log4j.xml에 추가하십시오
의 log4j.xml에 추가하십시오
<!-- enable query logging --> <category name="org.springframework.jdbc.core.JdbcTemplate"> <priority value="DEBUG" /> </category> <!-- enable query logging for SQL statement parameter value --> <category name="org.springframework.jdbc.core.StatementCreatorUtils"> <priority value="TRACE" /> </category>
당신의 로그의 외모와 같은 :
DEBUG JdbcTemplate:682 - Executing prepared SQL query DEBUG JdbcTemplate:616 - Executing prepared SQL statement [your sql query] TRACE StatementCreatorUtils:228 - Setting SQL statement parameter value: column index 1, parameter value [param], value class [java.lang.String], SQL type unknown
-
==============================
7.나는 100 % 당신이 일반적으로 방금 그를 기록 할 경우에 JdbcTemplate을에 (파라미터 또는되지 않음) SQL 쿼리로 전달됩니다 이후에 점점하는지입니다. 당신이자는 PreparedStatements이 있고 실행되고있는 하나의 알 수없는 경우, toString 메소드는 잘 작동합니다. 우리가 주제에있는 동안하지만,뿐만 아니라 바인딩 된 매개 변수 각각의 시간을 볼 당신이 자동으로 쿼리를 기록하게됩니다 여기에 좋은 JDBC 로거 패키지가있다. 매우 유용한. 출력은 다음과 같은 :
나는 100 % 당신이 일반적으로 방금 그를 기록 할 경우에 JdbcTemplate을에 (파라미터 또는되지 않음) SQL 쿼리로 전달됩니다 이후에 점점하는지입니다. 당신이자는 PreparedStatements이 있고 실행되고있는 하나의 알 수없는 경우, toString 메소드는 잘 작동합니다. 우리가 주제에있는 동안하지만,뿐만 아니라 바인딩 된 매개 변수 각각의 시간을 볼 당신이 자동으로 쿼리를 기록하게됩니다 여기에 좋은 JDBC 로거 패키지가있다. 매우 유용한. 출력은 다음과 같은 :
executing PreparedStatement: 'insert into ECAL_USER_APPT (appt_id, user_id, accepted, scheduler, id) values (?, ?, ?, ?, null)' with bind parameters: {1=25, 2=49, 3=1, 4=1}
from https://stackoverflow.com/questions/1932208/seeing-the-underlying-sql-in-the-spring-jdbctemplate by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 첫번째 COL의 존재 자동 증가와 MySQL의에서 DATA INFILE을로드하려면? (0) | 2020.05.09 |
---|---|
[SQL] 어떻게 작업의 상태를 확인할 수 있습니까? (0) | 2020.05.09 |
[SQL] MySQL은 : ERROR 1215 (HY000)는 : 외래 키 제약 조건을 추가 할 수 없습니다 (0) | 2020.05.09 |
[SQL] 어떻게 WHERE 절에 SELECT 문으로 SQL DELETE 문을 작성하는? (0) | 2020.05.09 |
[SQL] ORA-01795에 대한 해결 방법이 있습니까 : 목록에서 표현의 최대 수 1000 오류가? (0) | 2020.05.09 |