※ 이 글은 아끼는 저의 학생이 공유한 글을 기반으로 재편집한 글입니다.
기존의 Spring MVC 환경에서는 인메모리 DB인 h2의 web console을 이용하기 수월했었는데, Spring WebFlux + R2DBC 환경에서는 Spring MVC 환경에서 사용하던 방법 그대로 h2의 web console을 이용할 수 없기 때문에 별도의 설정을 해주어야 합니다.
Spring WebFlux + R2DBC 환경에서 h2 web console을 사용하기 위한 설정 방법은 다음과 같습니다.
Gradle 설정
== build.gradle ==
dependencies {
...
implementation 'io.r2dbc:r2dbc-h2'
}
build.gradle의 dependencies에 implementation 'io.r2dbc:r2dbc-h2'
를 추가합니다.
application.yml 설정
spring:
sql:
init:
schema-locations: classpath*:db/h2/schema.sql
data-locations: classpath*:db/h2/data.sql
r2dbc: # (1)
url: r2dbc:h2:mem:///test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
username: sa
password:
h2: # (2)
console:
port: 8090
logging:
level:
org:
springframework:
- (1)과 같이 R2DBC용 H2 Connection 정보를 설정합니다.
- (2)와 같이 h2 콘솔 포트를 8090으로 설정합니다. 포트 번호는 편한 번호로 설정하면 됩니다.
h2 console 서버 설정
==== H2ServerConfig.java ====
@Slf4j
@Component
public class H2ServerConfig {
@Value("${h2.console.port}")
private Integer port;
private Server webServer;
@EventListener(ContextRefreshedEvent.class)
public void start() throws java.sql.SQLException {
log.info("started h2 console at port {}.", port);
this.webServer = Server.createWebServer("-webPort", port.toString()).start();
}
@EventListener(ContextClosedEvent.class)
public void stop() {
log.info("stopped h2 console at port {}.", port); this.webServer.stop();
}
}
application.yml에서 추가한 포트 번호를 H2 Server를 start 하기 전에 지정해 줍니다.
애플리케이션 실행
애플리케이션을 실행한 후, http://localhost:8090
으로 접속해서 h2 web console로 접속이 잘 되는지 확인합니다.