如何显示本地h2数据库的内容(Web控制台)?

2024-04-09

最近我加入了一个新团队,这里的人使用 h2 进行存根服务。

我想知道是否可以使用网络界面显示该数据库的内容。在工作中,可以通过访问localhost:5080

我有一个使用 h2 数据库的项目,但是当我点击时我看不到 h2 Web 控制台localhost:5080

我也尝试过localhost:8082- 它也不起作用。

我的项目配置(成功运行):

     <bean id="wrappedDataSource" class="net.bull.javamelody.SpringDataSourceFactoryBean">
        <property name="targetName" value="dataSource" />
     </bean>

     <bean id="wrappedDataSource" class="net.bull.javamelody.SpringDataSourceFactoryBean">
            <property name="targetName" value="dataSource" />
        </bean>

        <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
            <property name="driverClassName" value="org.h2.Driver" />
            <property name="url" value="jdbc:h2:~/test;MODE=PostgreSQL" />
            <property name="username" value="sa" />
            <property name="password" value="" />
        </bean>

        <bean id="sessionFactory"
              class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource" ref="wrappedDataSource"/>
            <property name="configLocation">
                <value>classpath:hibernate-test.cfg.xml</value>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.show_sql">false</prop>
                    <prop key="hibernate.connection.charSet">UTF-8</prop>
                    <prop key="hibernate.format_sql">true</prop>
                    <prop key="hbm2ddl.auto">create-drop</prop>
                </props>
            </property>
        </bean>

        <context:property-placeholder location="classpath:jdbc.properties"/>

我不知道如何访问 h2 Web 控制台。请帮忙。

P.S.

我只在中看到提到 h2.m2 folder

P.S.2

我注意到网络控制台可以通过http://localhost:8082/如果将配置中的 url 替换为:

<property name="url" value="jdbc:h2:tcp://localhost/~/test;MODE=PostgreSQL" />

But如果我已经开始 h2(in.m2文件夹查找h2jar 文件并双击)

如果我启动应用程序时 h2 未启动 - 我会看到以下错误:

java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:94)
    ...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dbInitializer': Invocation of init method failed; nested exception is org.hibernate.exception.GenericJDBCException: Could not open connection
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
    ...
Caused by: org.hibernate.exception.GenericJDBCException: Could not open connection
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
    ...
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Соединение разорвано: "java.net.ConnectException: Connection refused: connect: localhost"
Connection is broken: "java.net.ConnectException: Connection refused: connect: localhost" [90067-182])
    at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
    ...
Caused by: org.h2.jdbc.JdbcSQLException: Соединение разорвано: "java.net.ConnectException: Connection refused: connect: localhost"
Connection is broken: "java.net.ConnectException: Connection refused: connect: localhost" [90067-182]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
    ...
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    ...

如果我启动应用程序时 h2 未启动,我希望实现 h2 启动。

P.S.3

我尝试编写以下代码:

Server server = null;
try {
    server = Server.createTcpServer("-tcpAllowOthers").start();
    Class.forName("org.h2.Driver");
    Connection conn = DriverManager.getConnection("jdbc:h2:tcp://localhost/~/test;MODE=PostgreSQL", "sa", "");
 } catch (Exception e) {
    LOG.error("Error while initialize", e);
 }

我执行它并在尝试输入后localhost:9092在我的浏览器中。

此时正在下载文件。文件内包含以下内容:

Version mismatch, driver version is “0” but server version is “15”

我的 h2 版本 1.4.182

P.S.4

这段代码的工作原理:

public class H2Starter extends ContextLoaderListener {
    private static final Logger LOG = LoggerFactory.getLogger(H2Starter.class);

    @Override
    public void contextInitialized(ServletContextEvent event) {

        startH2();
        super.contextInitialized(event);
    }

    private static void startH2() {

        try {
            Server.createTcpServer("-tcpAllowOthers").start();
            Class.forName("org.h2.Driver");
            DriverManager.getConnection("jdbc:h2:tcp://localhost/~/test;MODE=PostgreSQL;AUTO_SERVER=TRUE", "sa", "");

            Server.createWebServer().start();
        } catch (Exception e) {
            LOG.error("cannot start H2 [{}]", e);
        }
    }

    public static void main(String[] args) {
        startH2();
    }
}

但我只需要在混凝土弹簧配置文件处于活动状态时调用它(现在它始终有效)


让我们把问题分成两部分。

根据您指定与 H2 的连接的方式,您将获得不同的操作模式。

模式有:嵌入式、内存中、服务器。

jdbc:h2:~/test给你一个 H2 实例嵌入模式 http://www.h2database.com/html/cheatSheet.html。 嵌入式模式有一个限制,即只能通过相同的类加载器和相同的 JVM 访问(proof http://www.h2database.com/html/features.html#connection_modes)

jdbc:h2:mem:test为您提供一个内存中的 H2 实例。那也是not可从外部世界访问。

jdbc:h2:tcp://localhost/test将启动 H2 服务器,它将是无障碍从 JVM 外部服务器模式 http://www.h2database.com/html/tutorial.html#using_server但有一个限制 - 需要在建立连接之前启动服务器。

最后一个限制导致您Connection refused: connect: localhost"例外。

总结一下一切:

  • 启动H2服务器before你开始申请
  • use jdbc:h2:tcp://localhost/test作为连接字符串
  • ....
  • 快乐编码:)

Update

刚刚注意到您想在启动应用程序的过程中启动服务器。

您可以通过多种方式执行此操作,具体取决于您如何启动应用程序:

  • 如果您使用 maven / gradle,您可以更轻松地添加一些配置文件/任务,以便在应用程序实际启动之前执行它。
  • 如果你必须在java中设置一切,我建议你看看这个question https://stackoverflow.com/questions/29183503/start-h2-database-programmatically

Update 2

如果仅出于开发/调试目的需要连接到本地数据库,我将使用 Maven 配置文件设置所有内容。答案来自这个问题 https://stackoverflow.com/questions/2205126/starting-an-h2-database-server-from-maven会解决这个问题。

如果您需要在生产中访问 H2 数据库(我几乎无法想象任何用例),最好在春季进行。主要是因为应用程序容器/环境设置在生产中可能有所不同(与开发环境相比)。

要解决有关是否在 Spring 上下文之外启动服务器的问题 - 这完全取决于需求。 您应该注意的一件事是应该启动服务器before数据源已启动(否则 spring 上下文将无法加载)

Update 3

不幸的是,我无法为您提供可行的解决方案,但根据 JavaDocs,TCP 服务器和 Web 服务器之间存在差异。 仔细看看H2 Server 类的 JavaDoc http://www.h2database.com/javadoc/org/h2/tools/Server.html.

我想你应该使用Server.createWebServer()创建服务器的方法(TCP服务器和Web服务器的区别在于

您可以使用的另一个很棒的课程org.h2.tools.Console (Java文档在这里 http://www.h2database.com/javadoc/org/h2/tools/Console.html) 只需运行控制台的主要方法,我想这应该可以解决所有问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何显示本地h2数据库的内容(Web控制台)? 的相关文章

随机推荐

  • BigTable中的布隆过滤器可以仅根据行ID进行过滤吗?

    BigTable 使用布隆过滤器来允许点读取 以避免访问给定键列对内不包含任何数据的 SSTable 如果查询只指定行 ID 而没有列 ID 这些布隆过滤器是否也可用于避免访问 SSTable BigTable 使用行列对作为插入其布隆过滤
  • 检测ES模块是否在Node中从命令行运行

    在 Node 中使用 CommonJS 模块时 您可以使用以下命令检测脚本是否正在从命令行运行require main module 在 Node 中使用 ES 模块时 检测脚本是否正在从命令行运行的等效方法是什么 使用 experimen
  • 套接字编程Python:如何确保收到完整消息?

    我正在使用 python 3 x 和套接字模块 服务器在 ipv4 地址上运行并使用 tcp 我阅读了一些有关如何发送和接收数据的教程 对于服务器或客户端 要确保发送整个消息 您可以简单地检查发送的数据量是否等于消息的大小 def myse
  • 将 Foreach 分成线程示例

    我想跑 SearchResultByOrderNumber string orderNumber 中的方法Foreach与多线程 有十个订单号OrderNumbers数据表 在搜索这些 OrderNumbers 时OrderResultsD
  • 为什么 babel 将“true”转换为“!0”

    我检查了我转换后的代码 我看到了true被转换为 0 Example let obj loading true 转换为 let obj loading 0 这是为什么 是因为性能原因还是其他原因 对于小型化 即 更小的包大小 也可以看看 b
  • Python 委托模式 - 如何避免循环引用?

    我想问在Python中使用委托模式是否会导致循环引用 如果是的话 实现它以确保对象及其委托将被垃圾收集的最佳方法是什么 在 Objective C 中 通过使用委托的弱引用来避免上述问题 在 C 中 我们不会对委托调用删除 我在这里找到了
  • AWS 在 Google 云 (GCP) 中承担同等角色吗?

    如何在GCP中设置多帐户 项目 在AWS中可以通过使用assume role 有人知道如何在 Google Cloud Platform GCP 中执行此操作吗 我尝试在 GCP 中探索 AWS 等效项 但找不到任何文档 据记载 承担角色
  • WPF DropShadowEffect - 意外的色差

    我有一个带有 DropShadowEffect 的 TextBlock 某些阴影颜色显示得比指定的颜色更深 几乎就像它们被染色一样 然而 并非每种颜色都会发生这种情况 有谁知道为什么 或者有纠正的方法吗 这是一个非常基本的示例
  • 从网络浏览器中检测和访问 USB 设备 - 即使用插件

    是否可以通过插件 activeX Java 或 Flex 编写一个能够检测从 USB 设备通道读取数据流的浏览器插件 我做了一些研究 但没有找到答案 http support microsoft com kb 832678 http sup
  • 如何向 Visual Studio 2017 或 Visual Studio 2019 注册“自定义工具”以使其正常工作?

    背景 我们有一个定制工具 https msdn microsoft com en us library bb166817 aspx它接受 xml 输入并生成 cs 输出 自定义工具需要注册 https learn microsoft com
  • 从 mysql 迁移后 postgres 数据库不工作

    我在sequelize中将MySQL数据库更改为postgreSQL 但是迁移后我对表或模型中的大小写首字母有问题 在我的 MySQL 版本正常工作之前 但在迁移之后我收到错误消息 500 SequelizeDatabaseError re
  • Django HTML 截断

    我正在使用内置截断words html https docs djangoproject com en dev ref templates builtins from olddocs truncatewords htmlDjango 的过滤
  • 连接二维数组

    我有两个数组 mat1 和 Mat2 我想要 new mat ma1 mat2 我写了一个可以运行的函数 我想知道是否有一个适用于非常大的矩阵的有效函数或者如何使用 Array CopyTo 方法来做到这一点 public static d
  • 太多带有 unicode 文本的 UILabels

    我有180UILabels 子视图UITableViewCells 在 iPad 应用程序中 每个宽度为 155 X 155UILabel 并且每个都包含大量的 Unicode 文本 阿拉伯语 当我向下滚动时TableView它挂起 1 秒
  • SQL 查询查找车站之间的火车

    这是我的火车时刻表 我想要一个车站之间火车的解决方案 Train Code 15609 ABC 15609 XYZ 15609 PQR 15609 ADI 15609 QWE 15609 XPM 15609 IND 15680 ABC 15
  • 如何在haml模板中的coffescript中的ruby代码中使用本地或实例变量

    我是 Rails 的新手 并面临着复杂的问题 试图在 Haml 模板的 CoffeeScript 中的 ruby 辅助方法中使用变量 这是我在 haml 中的代码 coffee input field blur gt input input
  • Maven 依赖插件:复制依赖项:排除单个工件

    我需要从 maven dependency plugin copy dependencies 中排除单个工件 在文档上 https maven apache org plugins maven dependency plugin copy
  • set 和 freezeset 的继承行为似乎不同

    有人可以解释以下行为 class derivedset1 frozenset def new cls args return frozenset new cls args class derivedset2 set def new cls
  • 在 vscode 中找不到 python 调试适配器 - WSL:Ubuntu

    我正在尝试使用 vscode 调试 python 脚本远程WSL https marketplace visualstudio com items itemName ms vscode remote remote wsl使用 Python
  • 如何显示本地h2数据库的内容(Web控制台)?

    最近我加入了一个新团队 这里的人使用 h2 进行存根服务 我想知道是否可以使用网络界面显示该数据库的内容 在工作中 可以通过访问localhost 5080 我有一个使用 h2 数据库的项目 但是当我点击时我看不到 h2 Web 控制台lo