java

[spring boot] jooq query logging / show sql

kimxavi 2020. 8. 5. 18:35
반응형

상황

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/

반응형