【问题标题】:H2 in memory database doesn't show tables created in spring boot内存数据库中的 H2 不显示在 Spring Boot 中创建的表
【发布时间】:2017-03-29 06:11:10
【问题描述】:

我在 Maven 多模块环境中使用 Spring Boot 配置了内存数据库中的 H2。

Spring boot 日志显示 Schema 导出完成,我看不到在 h2 数据库中创建任何表。

application.properties

#spring h2
spring.h2.console.enabled=true
spring.h2.console.path=/h2

#Spring data JPA properties
spring.datasource.url=jdbc:h2:mem:testdb:MODE=MySQL;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=sa
spring.datasource.password=

spring.jpa.hibernate.ddl-auto=update


spring.jpa.show-sql=true
spring.jpa.hibernate.format_sql=true

hibernate.dialect=org.hibernate.dialect.H2Dialect

日志:

2016-11-15 16:35:05.413  INFO 10288 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2016-11-15 16:35:05.429  INFO 10288 --- [  restartedMain] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
2016-11-15 16:35:05.525  INFO 10288 --- [  restartedMain] org.hibernate.Version                    : HHH000412: Hibernate Core {4.3.11.Final}
2016-11-15 16:35:05.527  INFO 10288 --- [  restartedMain] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2016-11-15 16:35:05.529  INFO 10288 --- [  restartedMain] org.hibernate.cfg.Environment            : HHH000021: Bytecode provider name : javassist
2016-11-15 16:35:05.900  INFO 10288 --- [  restartedMain] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
2016-11-15 16:35:05.982  INFO 10288 --- [  restartedMain] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2016-11-15 16:35:06.025  INFO 10288 --- [  restartedMain] o.h.h.i.ast.ASTQueryTranslatorFactory    : HHH000397: Using ASTQueryTranslatorFactory
2016-11-15 16:35:06.148  INFO 10288 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
2016-11-15 16:35:06.150  INFO 10288 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete

有人能解释一下配置有什么问题吗?

【问题讨论】:

  • 这是 Spring Boot,不需要任何 XML 文件。因为它是自动配置的。
  • 你能告诉我你的 h2 数据源配置类和 logback\log4j 配置吗?也许你的代码中有一些错误的使用。
  • 我没有单独的类,它是一个 spring boot 自动配置。
  • 如何查看数据库的内容?如果您使用 TCP 服务器 (h2database.com/html/features.html#in_memory_databases),您可以连接到另一个进程。
  • @mcoolive,我无法查看任何内容。我假设正在创建表,因为正在控制台上打印模式导出完成。

标签: spring-mvc spring-boot spring-data-jpa h2


【解决方案1】:

所以,它是一个简单的注解,依次扫描实体类。

如果不是多模块项目,则不需要此注释。

用@EntityScan("packageName");注解主类

【讨论】:

  • 这不是一个好主意。这只是一种解决方法。它应该可以在不扫描多个实体所在的包的情况下工作。看看这个stackoverflow.com/questions/41841072/…
  • 当您将源代码与不同的包进行分组时,您必须扫描,除非您有更好的方法。
【解决方案2】:

在本文档中:http://docs.spring.io/spring-boot/docs/1.4.1.RELEASE/reference/htmlsingle/#howto-initialize-a-database-using-hibernate

说:您可以通过启用 org.hibernate.SQL 记录器来输出架构创建。如果您启用调试模式,这将自动为您完成。

这里是debug model

$ java -jar myapp.jar --debug

您也可以在application.properties 中指定debug=true

【讨论】:

【解决方案3】:

我遇到了同样的问题,我在下面添加了更改来解决它,

我在 pom.xml 中为 H2 依赖项添加了以下版本

<version>1.4.193</version>

并在属性文件中添加下面的配置

spring.h2.console.enabled=true
spring.datasource.platform=h2
spring.datasource.driverClassName = org.h2.Driver
spring.datasource.url=jdbc:h2:file:~/test;
spring.datasource.username=sa
spring.datasource.password=

【讨论】:

    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 2020-06-10
    • 2019-06-12
    • 2021-08-12
    相关资源
    最近更新 更多