我在 Spring JPA 测试中多次使用 in-mem 数据库,从来没有遇到过问题。这一次,我有一个更复杂的架构要初始化,并且该架构必须有一个自定义名称(我们域模型中的一些实体与特定的目录名称相关联。)因此,出于这个原因,以及确保测试完全同步并与我们初始化和维护模式的方式一致,我正在尝试在执行Spring Data JPA存储库单元测试之前使用 Liquibase 初始化内存中的 H2 数据库。
(注意:我们使用Spring Boot 2.1.3.RELEASE和MySql作为我们的主数据库,而H2 仅用于测试。)
我一直在遵循 Spring 参考指南在启动时设置Liquibase 执行。我的Maven POM 中有以下条目:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test-autoconfigure</artifactId>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我的测试文件如下所示:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = PersistenceTestConfig.class)
@DataJpaTest
public class MyRepositoryTest {
@Autowired
private MyRepository myRepository;
@Test
public void someDataAccessTest() {
// myRepository method invocation and …Run Code Online (Sandbox Code Playgroud) 我有一个多模块项目,其中每个模块使用Apache Felix maven-bundle-plugin打包为OSGi包.整个项目使用父POM构建,列出上述模块.某些模块包含配置资源(例如.properties文件),这些资源不应该在捆绑包内用于部署,而是在专用配置文件夹中外部化.我的目标是创建一个分发文件夹(可能是一个zip文件),看起来像这样:
my-app-distribution
/bundles
module1-bundle.jar
module2-bundle.jar
etc.
/conf
external1.properties
external2.properties
etc.
Run Code Online (Sandbox Code Playgroud)
目录下的属性文件/conf是从各个模块的/target文件夹中手工挑选的文件.究其原因,.properties文件需要从目标文件夹与在src文件夹拾起的是,我使用Maven资源过滤,和源属性文件包含${..}了特定环境下的值的占位符.这些占位符在构建过程中正确解析 - 每个构建配置文件 - 并且target/文件夹包含实际的特定于环境的值.
我已经多次完成了这样的分发文件操作 - 对于具有可执行JAR的发行版等.在这种情况下,我想使用程序集描述符的"moduleSets"配置 - 很容易将所有二进制文件/ jar放入单个分发文件夹中使用moduleSet /二进制描述符.在maven-bundle-plugin中也很容易将某些文件排除在打包到OSGi包中.我遇到的唯一问题是创建/conf分发文件夹并在那里收集必要的属性文件.我试图在"moduleSet/sources"描述符中使用"fileSets"来仅包含**/target每个模块的特定文件,但这似乎不起作用.
有人有建议吗?必须有一个简单的方法.或者我根本不应该使用?
谢谢,
简历
@PetrKozelka我不确定将特定于不同软件包的配置文件提取到一个单独的模块中是个好主意.OSGi的重点在于捆绑包是独立的,并且可以在开发和分发中重复使用.只有在源代码中将功能实现和相关配置文件组合在一起才有意义.对于特定的发行版,虽然我可能需要提取一些文件 - 如果管理员需要控制某些参数.对于不同的分发/应用,这可能是不同的.装配配置可能会更改,但捆绑/源将保持不变.此外,每个捆绑包可能会被单独开发和使用,并非所有捆绑包都必须始终是同一个超级项目的一部分 - 正如您所假设的那样.工件的类型(例如"模型","服务","数据访问","配置"等),而不是功能域/特征.这种方法在单个应用程序/项目中正常工作,但在企业级别上失败,因为通常需要重用垂直组件的子集(按功能域划分).
至于你依赖于模块中的文件布局,我同意不应该有这样的依赖.文件可以通过其显式名称或命名约定来手工挑选 - 根据非常具体的发行版要求.(这正是我面临的情况.)
osgi distribution maven maven-assembly-plugin maven-resources-plugin