H2ConsoleAutoConfiguration不会对Spring WebFlux和Netty(响应式)执行,因为H2控制台将只对基于servlet的应用程序可用。所以,你必须在这个spring boot应用程序中手动配置H2服务器,使用spring webflux和netty。
这是一份配置h2控制台的代码示例
import org.h2.tools.Server;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import static org.h2.tools.Server.createWebServer;
@Component
public class H2ServerManual {
Logger log = LoggerFactory.getLogger(H2ServerManual.class);
private Server webServer;
@Value("${h2-server.port}")
Integer h2ConsolePort;
@EventListener(ContextRefreshedEvent.class)
public void start() throws java.sql.SQLException {
log.info("starting h2 console at port " + h2ConsolePort);
this.webServer = createWebServer("-webPort", h2ConsolePort.toString(),
"-tcpAllowOthers").start();
System.out.println(webServer.getURL());
}
@EventListener(ContextClosedEvent.class)
public void stop() {
log.info("stopping h2 console at port " + h2ConsolePort);
this.webServer.stop();
}
}
如果发现某些类找不见需要去掉h2依赖中的依赖生效范围
你需要在spring的配置文件中配置h2的端口,不能和应用程序端口一样
h2-server:
port: 8081
需要配置开启控制台
spring:
h2:
console:
enabled: true
settings:
web-allow-others: true
path: /h2
datasource:
url: jdbc:h2:./rental_db;AUTO_SERVER=TRUE
username: sa
password:
driverClassName: org.h2.Driver