数据库
首页 > 数据库> > java – Spring Boot无法运行schema.sql,依赖于spring-cloud-starter-config

java – Spring Boot无法运行schema.sql,依赖于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)应用程序,该应用程序依赖于:

>网络
>休息库
> jpa
> 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.yml替换空的application.properties:

spring:
  jpa:
    hibernate.ddl-auto: none

现在,运行应用程序并转到http://localhost:8080/rooms.应用程序将失败,JdbcSQLException显示该表不存在:

org.h2.jdbc.JdbcSQLException: Table “ROOM” not found; SQL statement:
select room0_.room_id as room_id1_0_, room0_.name as 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文件?

解决方法:

我有类似的问题,但在测试执行H2数据库架构创建.我刚刚尝试了更新的版本 – spring-boot-starter-parent:2.0.2.RELEASE和Finchley.RC2 for Spring Cloud,它适用于我的情况.

用你的例子花了几分钟 – 可以使用Spring Boot 2.0.1和Spring Cloud Finchley.RC1重现,但是在2.0.2和Finchley.RC2下可以正常工作.
我没有设法找到github问题,但看起来它已修复.

标签:java,spring,spring-boot-2,spring-cloud-2
来源: https://codeday.me/bug/20190705/1388745.html