我在项目中使用带有gradle的Spring Boot,具有以下项目结构:
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实体。所以我预期的步骤顺序是:
resources/import.sql
出于测试目的,我尝试创建TestConfiguration.java
接口,我在其中使用@Sql
anotation:
@Sql("src/scripts/custom_script.sql")
public interface TestConfiguration {
}
接下来我想将此接口用于需要此脚本的测试:
@Transactional
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserRepositoryTest implements TestConfiguration {
}
问题是:
答案 0 :(得分:2)
@Sql
仅适用于测试:
但是你可以尝试以下方法。 将脚本文件夹放在src / test / resources
下,将脚本添加到类路径中然后在UserRepositoryTest类上设置@Sql
注释并将路径更改为:
@Sql("classpath:scripts/custom_script.sql")
如果您想在其他测试中使用它,请创建一个带有所需注释的抽象测试类。
如果您需要真正的数据库迁移,请查看Flyway:https://flywaydb.org/
答案 1 :(得分:0)
查看Flyway https://flywaydb.org/。此插件允许在启动期间进行数据库迁移,并可以对数据库执行各种操作以从一个版本迁移到另一个版本。这将满足您的需求。