반응형

상황

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/

반응형

'java' 카테고리의 다른 글

[java] JVM 옵션 -Xms 와 -Xmx 를 같게 하는 이유  (0) 2022.05.26
Using @PageableDefault in webflux  (0) 2022.04.20
[java] jar 압축 해제  (0) 2020.08.03
[java][test] JSON 같은지 비교  (0) 2020.07.17
[Guava] cache simple example  (0) 2020.06.03

+ Recent posts