상황
jOOQ 에서 실행되는 SQL 을 show, print, logging 해보자
해결법
1. Listener 생성
public class LoggingExecuteListener extends DefaultExecuteListener {
@Override
public void executeStart(ExecuteContext ctx) {
// Create a new DSLContext for logging rendering purposes
// This DSLContext doesn't need a connection, only the SQLDialect...
DSLContext create = DSL.using(ctx.dialect(),
// ... and the flag for pretty-printing
new Settings().withRenderFormatted(true));
// If we're executing a query
if (ctx.query() != null) {
System.out.println(create.renderInlined(ctx.query()));
} else if (ctx.routine() != null) {
// If we're executing a routine
System.out.println(create.renderInlined(ctx.routine()));
} else if (ctx.batchQueries() != null) {
// If we're executing a batch queries
Arrays.stream(ctx.batchQueries()).forEach(query -> System.out.println(create.renderInlined(query)));
}
}
}
2. ListenerProvider Bean 생성
@Bean
public ExecuteListenerProvider executeListenerProvider() {
return new DefaultExecuteListenerProvider(new LoggingExecuteListener());
}
출처
https://www.jooq.org/doc/3.13/manual/sql-execution/execute-listeners
https://www.jooq.org/doc/latest/manual/sql-building/queryparts/pretty-printing/