我在我的项目中使用 Spring Boot 和 gradle,项目结构如下:
src/
├── main
│ ├── java
│ └── resources
│ └── import.sql
├── scripts
│ └── custom_script.sql
└── test
├── java
│ ├── persistent
│ │ └── UserRepositoryTest.java
│ └── TestConfiguration.java
└── resources
└── import.sql
在custom_script.sql
中我有一些我的应用程序需要的sql脚本,例如在插入之前触发等等。是否可以配置应用程序,例如使用应用程序属性文件、 hibernate 或其他某种方式来加载该脚本并在创建表后创建触发器?
我已将表定义为 JPA 实体。所以我预期的步骤顺序是:
- 从 JPA 实体创建表
- 从 script/custom_script.sql 加载触发器
- 从
resources/import.sql
加载插入脚本 - 运行应用程序/测试(这取决于我是否决定运行主应用程序或测试)
出于测试目的,我尝试创建 TestConfiguration.java
接口(interface),在其中使用 @Sql
注释:
@Sql("src/scripts/custom_script.sql")
public interface TestConfiguration {
}
接下来我想使用这个接口(interface)进行需要这样的脚本的测试:
@Transactional
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserRepositoryTest implements TestConfiguration {
}
问题是:
- 我的解决方案不起作用
- 仅涵盖测试用例,不涵盖应用程序正常启动时的情况
你能帮我吗?谢谢。
最佳答案
@Sql
仅适用于测试:
但是您可以尝试以下操作。 将脚本文件夹放在 src/test/resources 下,将脚本添加到类路径
然后在 UserRepositoryTest 类上设置@Sql
注释并将路径更改为:
@Sql("classpath:scripts/custom_script.sql")
如果您想在其他测试中使用它,请创建一个带有所需注释的抽象测试类。
如果您需要真正的数据库迁移,请查看 Flyway:https://flywaydb.org/
关于java - 在 Spring Boot 中创建数据库表后运行自定义脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48909046/