栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

H2不在我的Spring Boot应用程序中创建/更新表。我的实体出了什么问题?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

H2不在我的Spring Boot应用程序中创建/更新表。我的实体出了什么问题?

看起来数据已绑定到参数,但是在H2控制台中SELECt * FROM GAME不返回任何内容。该表不存在。

您正在使用

in-memory
H2 的实例:

spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1

在这种模式下,您无法从启动

in-memory
数据库的另一个客户端看到更改的内容 。
要查看其他客户端的更改,您必须使用TCP模式。

您有两种解决方案:

  • 使用文件保留H2实例。

数据库文件存储在哪里?

使用jdbc:h2:〜/ test之类的数据库URL时,数据库存储在用户目录中。对于Windows,通常为C: documents and
Settings 或C: Users 。如果未设置基本目录(如在jdbc:h2:./
test中),则数据库文件存储在启动应用程序的目录(当前工作目录)中。从开始菜单使用H2控制台应用程序时,该目录为/
bin。可以在数据库URL中设置基本目录。可以使用固定或相对路径。使用URL jdbc:h2:file:./ data /
sample时,数据库存储在目录数据中(相对于当前工作目录)。如果该目录尚不存在,则会自动创建。也可以使用完全限定的目录名(对于Windows,则为驱动器名)。示例:jdbc:h2:file:C:/
data / test

  • 继续使用内存中的实例,但使用TCP模式。

更换:

spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1

创建人:

spring.datasource.url=jdbc:h2:tcp://localhost/~/test

通常,在我真的想知道数据库中插入了哪个时,我在JPA实体单元测试期间切换到此模式。

从官方文档中:

内存数据库

对于某些用例(例如:快速原型制作,测试,高性能操作,只读数据库),可能不需要保留数据或保留对数据的更改。该数据库支持内存模式,在该模式下数据不会持久保存。…

在某些情况下,仅需要与内存数据库的一个连接。这意味着要打开的数据库是私有的。在这种情况下,数据库URL为jdbc:h2:mem:在同一虚拟机中打开两个连接意味着打开两个不同的(专用)数据库。

有时需要到同一内存数据库的多个连接。在这种情况下,数据库URL必须包含一个名称。示例:jdbc:h2:mem:db1。使用此URL访问相同的数据库仅在相同的虚拟机和类加载器环境中有效。

要从另一个进程或另一台计算机访问内存数据库,您需要以与创建内存数据库相同的过程来启动TCP服务器。
然后,其他进程需要使用数据库URL,例如jdbc:h2:tcp:// localhost / mem:db1,通过TCP /
IP或TLS访问数据库。


独立H2控制台的替代方法:使用可从Spring Boot应用程序访问的H2控制台

实际上,H2数据库提供了一个基于浏览器的控制台,Spring Boot可以为您自动配置该控制台。满足以下条件时,将自动配置控制台:

  • 您正在开发基于servlet的Web应用程序。
  • com.h2database:h2在类路径上。
  • 您正在使用Spring Boot的开发人员工具。

因此,这意味着只能在dev中访问。通常您想要什么。

默认情况下,控制台位于

/h2-console

设置
spring.h2.console.path
属性以更改该设置。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/615586.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号