java - Spring Boot 配置文件 - 运行 sql 脚本而不是 ddl-auto

标签 java hibernate spring-boot

我设置了 3 个配置文件(dev/test/prod),工作起来就像魔术一样(java 和 spring boot 的新手)

在我的开发配置文件中,数据库是使用

生成的
hibernate.ddl-auto

工作得很好......也与

.hibernate.hbm2ddl.import_files

我用来用测试数据填充数据库

在测试环境中,我想运行一个脚本,该脚本从转储中设置数据库..使其更像生产(由于某种原因实体与数据库不匹配)

所以我尝试使用:

datasource.data 

&& ||

datasource.schema

在不同的组合中, 文件:,类路径前缀......

当我这样做时:

datasource.data=data.sql

它说:

'ServletContext resource [/data.sql]' is invalid: The specified resource does not exist

...移动文件.../src/main/src/main/resources/src/main/resources/META-INF ..所有这些东西

我不明白“ServletContext”是什么意思......

我确实禁用了

hibernate.ddl-auto

通过在该配置文件中将其设置为无

还有

hibernate.jpa.generate-ddl

设置为 false,即使在设置 ddl-auto 时不需要/使用它

...在我的“谷歌搜索”任务中,我看到了 2014 年的帖子,并且完全困惑了,因为事情是从那时开始的......

有,我指望那个;),一些必须设置为“runThisScript”的属性,但我浏览了文档......可能我错过了一些东西

有人可以给我指出正确的方向吗?
谢谢!

感谢@Blagoj的快速响应,该链接帮助了我..通过设置 ddl-auto 创建来执行脚本..但它也是从实体生成的...如何阻止它这样做&&拥有脚本被处决?

感谢@luboskrnac 您的建议!会看看/使用它! ..令我烦恼的是,我必须做错/从我的角度来看不太好...在开发中以匹配产品.....希望在开发中做对,并在我一旦我就在该状态上进行生产可以证明它是正确的;)

...好吧,现在我最终手动设置了测试环境..但一旦我了解更多,我会尝试将其自动化...我发现总有一个工具可以解决注入(inject)问题;)

最佳答案

使用 Flyway 或 Liquibase 等数据库迁移工具来创建初始架构并进行数据库架构的增量迁移。现在重要的一点:在 DEV 和 PROD 环境中以同样的方式进行!否则你就是自找麻烦。

初始模式可以在 Hibernate 的帮助下生成。 spring.jpa.hibernate.ddl-auto=create 将从 JPA 模型创建模式 + logging.level.org.hibernate.SQL=DEBUG 将碰撞 SQL 命令来创建这个模式。此 SQL 转储可用作 Flyway 或 Liquibase 的初始迁移脚本。

您甚至可以将示例数据插入 PROD(如果您可以将它们隐藏在测试帐户后面)。您可以针对 PROD 实例运行自动化测试,这可以方便地验证重要功能是否在 PROD 中正常运行。

关于java - Spring Boot 配置文件 - 运行 sql 脚本而不是 ddl-auto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52773727/

相关文章:

java - JTable - 拖放

java - 如何以字符串形式向 UI 显示 byte[]

java - Hibernate 4.3.5 - hibernate-entitymanager-4.3.5.Final.jar 有什么用

java - Hibernate的SequenceStyleGenerator生成序列下面得到的序列值

java - MongoDb 将 Float 字段存储为 Double。获取 IllegalArgumentException

mysql - 如何使用 Spring boot 从 select 查询中获取结果

java - 卡夫卡流错误: SerializationException: Size of data received by LongDeserializer is not 8

java - 自定义 Interactive Brokers 的 reqIds() 和 reqMktData() Java 方法

java - 升级JUNIT 5后无单元测试

Java序列化: How use Object InputStream/Object Output Stream