【发布时间】:2023-04-06 22:56:01
【问题描述】:
我有一个(平面)多模块项目,其结构大致如下:
- 父级 (pom)
- 一个(罐子)
- B(罐子)
- C(罐子)
- D(战争)
模块 D 依赖于 A、B 和 C,并将所有内容打包在一个战争中。每个 jar 模块(A、B 和 C)都有使用嵌入式 H2 数据库的基于 JUnit 的集成测试(它们是 @SpringBootTest,使用 SpringRunner 运行)。
使用专门的测试配置文件中的属性简单地设置数据库:
spring.datasource.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.datasource.hibernate.hbm2ddl.auto=validate
spring.datasource.url=jdbc:h2:mem:def;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=sa
spring.datasource.password=password
目前,当在父节点上运行 mvn install 时,数据库会在每个模块的构建运行之前创建(即,数据库在每个模块构建之后被销毁)。
是否有可能在每个模块的构建之间以某种方式保留数据库?原因是数据库的设置是一项相当耗时的操作。
【问题讨论】:
-
您可以将其定义为嵌入式数据库
h2:file,指向在构建期间安全的路径,例如不会被擦除。 -
我也对此有所了解,如果没有其他解决方案,我可能会回到那个...一个问题是我希望在整个构建过程中确实生成数据库跑步;如果我们有一个文件,它可能在不久前就已经存在(并导致与当前定义发生冲突)。在
clean目标中尽早删除数据库文件可能是一个想法...... -
只在 jars 中使用 unittest 并将集成测试放在战争级别呢?这样你只启动一次 spring。
-
这肯定是我推荐的方法,但不幸的是有几个问题阻碍了这一点。从技术上讲,实际上产生了几个战争,并且大多数模块都在战争之间使用。实际上,在这个项目的生命周期中,真正引入这样的改变已经太晚了......
-
@mrkernelpanic:如果您发表评论作为答案,我会赞成。如果我没有找到更好的方法,那么我也会在接下来的日子里接受它:)