如何将H2控制台连接到嵌入式Spring H2 DB

G.S*_*sky 1 java database spring spring-mvc h2

好的,我正在开发简单的应用程序,它有Spring Ebedded H2数据库用于开发.database.xml bean conf看起来像这样:

<bean id="h2Server" class="org.h2.tools.Server" factory-method="createTcpServer"
        init-method="start" destroy-method="stop" depends-on="h2WebServer">
        <constructor-arg value="-tcp,-tcpAllowOthers,-tcpPort,9092" />
    </bean>
    <bean id="h2WebServer" class="org.h2.tools.Server" factory-method="createWebServer"
        init-method="start" destroy-method="stop">
        <constructor-arg value="-web,-webAllowOthers,-webPort,8082" />
    </bean>

    <jdbc:embedded-database id="dataSource" type="H2" />
Run Code Online (Sandbox Code Playgroud)

H2数据库正在初始化,我的应用程序正在运行,我正在创建实体,并且它们在Tomcat启动时存储在H2 db中(我知道它因为我使用并检索它们).但是,当我查看H2控制台时,我的实体表不存在.

我猜H2控制台指向另一个H2数据库,而Spring Embedded H2 Db与那个H2控制台无关.

如何解决?

编辑:我通过在我的网络浏览器中输入http:// localhost:8082来访问H2控制台.

小智 5

如果您的应用程序不是弹簧启动,则需要在web.xml文件中添加以下servlet配置

!-- H2 Database Console for managing the app's database -->
<servlet>
    <servlet-name>H2Console</servlet-name>
    <servlet-class>org.h2.server.web.WebServlet</servlet-class>
    <init-param>
        <param-name>-webAllowOthers</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>H2Console</servlet-name>
    <url-pattern>/admin/h2/*</url-pattern>
</servlet-mapping>

<!-- Handles requests into the application -->
Run Code Online (Sandbox Code Playgroud)

请查看更多详情https://github.com/spring-projects/greenhouse/blob/master/src/main/webapp/WEB-INF/web.xml

如果你的应用程序是基于spring boot而不是你必须遵循https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/

  • 如果您使用的是最新版本的 springboot (1.3),您甚至不需要遵循该教程。您可以将以下内容添加到 applicaiton.properties 文件中: spring.h2.console.enabled=true 。或者,有关更多信息,请参阅:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-sql-h2-console (2认同)