我的spring boot 2.0应用程序识别并运行schema.sql来初始化我的嵌入式h2数据库。但是当我添加spring-cloud-starter-config依赖项时,应用程序不再运行schema.sql。为了说明,使用spring initializr生成一个依赖于以下内容的Spring Boot 2(v2.0.1)应用程序:
添加实体:
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.yml替换空的application.properties:
spring:
jpa:
hibernate.ddl-auto: none
现在,运行该应用程序并转到http://localhost:8080/rooms。应用程序将失败,JdbcSQLException显示该表不存在:
org.h2.jdbc.JdbcSQLException:未找到表“ROOM”; SQL语句: 选择room0_.room_id为room_id1_0_,room0_.name为name2_0_ from room room0 _
现在进入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文件?
答案 0 :(得分:1)
我有类似的问题,但在使用H2数据库架构创建的测试执行期间。我刚刚尝试过更新版本 - spring-boot-starter-parent:2.0.2.RELEASE
和Finchley.RC2
用于Spring Cloud,它适用于我的情况。
用你的例子花了几分钟 - 可以使用Spring Boot 2.0.1和Spring Cloud Finchley.RC1重现,但在2.0.2和Finchley.RC2下工作正常。 我没有设法找到github问题,但看起来已修复。