【问题标题】:Spring Boot 2.0.0.RELEASE - does not run H2 data.sqlSpring Boot 2.0.0.RELEASE - 不运行 H2 data.sql
【发布时间】:2018-12-31 03:55:39
【问题描述】:

带有 h2 的简单 Spring Boot 应用程序,其中有 1 个通过 data.sql 填充的 DB 表。如果我切换到 2.0.0.RELEASE,则可以 100% 与 spring-boot-starter-parent 1.5.9.RELEASE 一起工作,data.sql 在启动时不再运行。

在我的 pom.xml 中有

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

......

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
     <!-- <version>2.0.0.RELEASE</version> -->  
    <version>1.5.9.RELEASE</version>

    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
     <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>     
        <scope>runtime</scope>       
    </dependency>


</dependencies>

......

和一个插入到 DB 表中的 SQL 文件 src/main/resources/data.sql

在application.properties文件中

spring.datasource.url=jdbc:h2:file:~/greeter;AUTO_SERVER=TRUE
spring.datasource.initialization-mode=always

spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create-drop

在您看到的日志中启动时使用 1.5.9.RELEASE:

2018-07-23 17:53:41.219  INFO 11404 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
Hibernate: drop table greeting if exists
Hibernate: create table greeting (id bigint not null, action varchar(255), say varchar(255), primary key (id))
2018-07-23 17:53:41.238  INFO 11404 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete
2018-07-23 17:53:41.341  INFO 11404 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2018-07-23 17:53:41.590  INFO 11404 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executing SQL script from URL [file:/..../classes/data.sql]

使用 2.0.0.RELEASE

我的 application.properties 文件中似乎没有任何内容。 没有删除/重新创建数据库,也没有将 data.sql 导入数据库。日志如下; 不知何故,它似​​乎与 Maven 有关。问题所在的启动日志

2018-07-23 21:16:39.532  INFO 3600 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2018-07-23 21:16:39.741  INFO 3600 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2018-07-23 21:16:39.880  INFO 3600 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2018-07-23 21:16:39.911  INFO 3600 --- [  restartedMain] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
2018-07-23 21:16:40.114  INFO 3600 --- [  restartedMain] org.hibernate.Version                    : HHH000412: Hibernate Core {5.2.14.Final}
2018-07-23 21:16:40.119  INFO 3600 --- [  restartedMain] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2018-07-23 21:16:40.382  INFO 3600 --- [  restartedMain] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2018-07-23 21:16:40.685  INFO 3600 --- [  restartedMain] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2018-07-23 21:16:41.840  INFO 3600 --- [  restartedMain] o.h.t.schema.internal.SchemaCreatorImpl  : HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@542d091e'
2018-07-23 21:16:41.850  INFO 3600 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2018-07-23 21:16:43.574  INFO 3600 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@29bb347c: startup date [Mon Jul 23 21:16:33 CAT 2018]; root of context hierarchy
2018-07-23 21:16:43.710  WARN 3600 --- [  restartedMain] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning

除了 pom.xml 中的版本发生了变化,别无其他...

在 Spring 2.0.0.RELEASE 中需要什么来运行它?

编辑 1 编辑 1 编辑 1 不知何故,它似​​乎与 Maven 依赖项有关 ????????? 如果我在 pom.xml 中包含存储库,例如下面的一切都可以...删除它们我有上面提到的问题

<repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>  

【问题讨论】:

  • 您将data.sql 文件放在哪里?
  • src/main/resources/data.sql
  • 你能给我看看启动日志吗?我刚刚尝试了一个简单的项目,似乎已经为我挑选并执行了 data.sql...
  • @RajaAnbazhagan 我编辑了问题以包含我遇到此问题时的启动日志。还添加了一个奇怪的东西,似乎可以纠正它。
  • 如果没有存储库配置,它对我来说运行良好...您能否通过 GitHub 与我们分享一个简单的可重现示例...?

标签: spring-boot h2 h2db


【解决方案1】:

确保在从 h2-console 连接时使用 jdbc:h2:mem:testdb 作为 JDBC URL。当我们有 h2 提供的默认 url (jdbc:h2:~/test) 时,您将不会在数据库中看到脚本结果。

另外,要在控制台上查看调试,只需将debug=true 放入 application.properties 文件中。

内存中

URL jdbc:h2:mem:test 表示打开内存数据库 命名为“测试”。数据不持久化,最后一次连接时丢失 到数据库已关闭。多个线程可以访问同一个 数据库,但数据只在同一个进程内可见

更多信息请见http://www.h2database.com/html/features.html#database_url

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 2018-03-28
    • 1970-01-01
    • 2016-10-13
    • 2021-08-17
    • 1970-01-01
    • 2020-04-07
    • 2019-02-05
    相关资源
    最近更新 更多