【问题标题】:Springboot default data.sql not loading on startupSpring Boot默认data.sql在启动时未加载
【发布时间】:2020-09-29 15:36:05
【问题描述】:

我有这个使用 postgresql 数据库的 springboot 应用程序。我的 application-dev.properties 文件如下:

spring.datasource.platform=postgres
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=root


spring.datasource.data=classpath:/sql/dev-data.sql


spring.jpa.properties.hibernate.default_schema=myschema

spring.jpa.show-sql=true
spring.jpa.database=POSTGRESQL

数据库安装在我的开发机器上,并且已经初始化。 dev-data.sql 在src/main/resources/sql 中,现在只删除特定表上的所有内容(我们称之为myschema.example_table)并插入一些注册表。 (这是为了检查功能是否有效,而不是实际使用):

delete from myschema.example_table where id > 0;

insert into myschema.example_table (id, val1, val2) values (1, "Hello", "Petecander");
insert into myschema.example_table (id, val1, val2) values (2, "Goodbye", "Gromenauer");

我的问题是……什么都没有发生。就好像根本没有任何与 dev-data.sql 文件相关的东西。所以,我在这里完全不知所措。我已经浏览了一段时间,并阅读了许多可以在 application.properties 文件上启用的不同开关,但没有。有什么想法吗?

编辑:只是为了提供一些我在下面被问到的信息:应用程序加载正常,可以对数据库执行一些基本的 CRUD 内容(目前只需阅读内容),所以 application-dev .properties 文件可以看到正在正确加载。

【问题讨论】:

  • 为什么将其命名为dev-data.sql?为什么不data.sql
  • 我不认为spring.datasource.platform=postgres 是必要的,因为spring 会尽可能从URL 中确定数据库。大概如果你在 localhost 上运行它,你已经从 docker 容器映射了端口? 5432 是正确的端口吗?您已将 DB 指定为 postgres,但将模式指定为 myschema 用于休眠 - 这可能是个问题吗?大概当您是 spring boot 应用程序时,它会将配置文件设置为 dev 以便 application-dev.properties 是正在使用的属性源?我可以想办法进行测试,但在您制定调试计划之前需要回答一些问题
  • Answering @RobEvans:应用程序运行基本的 CRUD 操作“很好”,并且数据库不在 docker 容器中,而是安装在我的开发机器中(我们处于开发的早期阶段,想法正在与docker一起使用,但还没有)。是的,正在加载 application-dev.properties 文件(它包含到数据库的所有连接信息,所以要么就是魔法)。

标签: java spring postgresql spring-boot jpa


【解决方案1】:

Hibernate 只会为 create 或 create-drop 执行 data.sql

将以下属性添加到您的应用程序属性中 spring.jpa.hibernate.ddl-auto=createspring.jpa.hibernate.ddl-auto=create-drop

这与属性一起是必需的 spring.datasource.initialization-mode=always 用于外部(非嵌入式)数据库。

【讨论】:

  • 是的,做到了!我使用了spring.jpa.hibernate.ddl-auto=update,因为数据库目前已创建并且“稳定”(尽管我对未来的想法是在开发中使用 ddl 来创建数据库)。必须解决我的 SQL 的一些小问题,现在正在工作。谢谢!
【解决方案2】:

您是否尝试将文件命名为 data.sql?我认为它可以帮助https://www.baeldung.com/spring-boot-data-sql-and-schema-sql

【讨论】:

    【解决方案3】:

    我遇到了类似的问题并找到了我的答案here。如果添加:

    spring.datasource.initialization-mode=always
    

    对于您的属性,它应该可以工作。

    【讨论】:

    • 没用。这是我在原始帖子中提到的“许多不同的开关”之一(我已经尝试了很多组合都无济于事)。
    • 您确定正在加载属性吗?
    • 是的,application.properties 文件只有spring.profiles.active=dev,application-dev.properties 有本地数据库的所有连接数据(我可以执行基本的 CRUD 操作),控制台告诉我使用“dev”配置文件运行。
    【解决方案4】:

    对于像 h2 这样的嵌入式数据库,在 application.properties 中添加以下条目对我有用。

    spring.datasource.data=classpath:mysql.sql

    【讨论】:

      猜你喜欢
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多