簡體   English   中英

Spring Boot無法運行依賴於spring-cloud-starter-config的schema.sql

[英]Spring Boot fails to run schema.sql with dependency on spring-cloud-starter-config

我的spring boot 2.0應用程序識別並運行schema.sql來初始化我的嵌入式h2數據庫。 但是,當我添加spring-cloud-starter-config依賴項時,該應用程序不再運行schema.sql。 為了說明這一點,請使用spring initializr生成依賴於以下內容的Spring Boot 2(v2.0.1)應用程序:

  • 網絡
  • 休息庫
  • pa
  • h2
  • 配置客戶端

添加實體:

package com.example.demo;

import javax.persistence.*;

@Entity
public class Room {
    @Id
    @Column(name = "ROOM_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column
    private String name;

//...getters and setters

}

實體的存儲庫:

package com.example.demo;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface RoomRepository extends CrudRepository<Room, Long> {

}

主類與initializr生成的內容保持不變:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

將schema.sql和data.sql文件添加到資源下的基本文件夾中。 Spring Boot使用這些來創建和填充實體的基礎表:

schema.sql:

CREATE TABLE ROOM(
    ROOM_ID BIGINT AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(16) NOT NULL,
);

data.sql:

INSERT INTO ROOM (NAME) VALUES ('Piccadilly');
INSERT INTO ROOM (NAME) VALUES ('Cambridge');
INSERT INTO ROOM (NAME) VALUES ('Oxford');
INSERT INTO ROOM (NAME) VALUES ('Manchester');

將空的application.properties替換為此application.yml:

spring:
  jpa:
    hibernate.ddl-auto: none

現在,運行該應用程序並轉到http:// localhost:8080 / rooms 應用程序將失敗,並顯示表不存在的JdbcSQLException:

org.h2.jdbc.JdbcSQLException:未找到表“ ROOM”; SQL語句:從room room0_中選擇room0_.room_id作為room_id1_0_,將room0_.name作為name2_0_

現在進入pom.xml並注釋掉對spring-cloud-starter-config依賴項的引用:

<!--
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
-->

重新啟動應用程序,一切正常! 在瀏覽器中打開http:// localhost:8080 / rooms ,您將發現返回了預期的JSON結果(帶有4行)。 這告訴我,是Spring-cloud-starter-config依賴項阻止了Spring執行schema.sql和data.sql初始化數據庫。

使用Spring Cloud依賴項時如何獲取Spring Boot以執行schema.sql和data.sql文件?

我有類似的問題,但是在執行H2數據庫架構創建的測試期間。 我剛剛嘗試了較新的版本spring-boot-starter-parent:2.0.2.RELEASE Cloud的spring-boot-starter-parent:2.0.2.RELEASEFinchley.RC2 ,它在我的情況下可以工作。

您的示例花了幾分鍾-在Spring Boot 2.0.1和Spring Cloud Finchley.RC1中可以重現,但在2.0.2和Finchley.RC2中可以正常工作。 我沒有找到github問題,但是看起來像是固定的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM