首页 文章

Spring Boot - 如何在多模块项目中从姐妹模块启动Spring Boot应用程序?

提问于
浏览
1

我有一个包含两个项目的多模块项目:后端和客户端 . 后端是一个普通的Spring Boot Rest API,没什么特别的 . 客户端模块只是使用Rest API的Java库 .

后端包含“war”作为后端,因为它也使用JSP,并且需要部署到servlet容器 . 使用@SpringBootTest仍然可以轻松测试后端 .

现在我想在客户端模块中使用后端模块作为沙盒服务器进行一些集成测试 .

要使用我添加的客户端模块中的所有后端类

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <configuration>
    <attachClasses>true</attachClasses>
  </configuration>
</plugin>

并使用类将后端配置为客户端中的测试依赖项

在我的client / src / test / java中,我有一个辅助类来启动后端模块

@Configuration  
public class SandboxServer {

  @Bean
  public ConfigurableApplicationContext backend() {
    return 
      new SpringApplicationBuilder(BackendApplication.class)
      .sources(SandboxServerConfig.class)
      .run("spring.profiles.active=sandbox")
  }
}

配置文件“sandbox”用于设置测试数据库等 . 但是我遇到了更多问题 . 第一个问题是关于文档根目录,所以我配置它:

public class SandboxServerConfig 
  implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
  @Override
  public void customize(TomcatServletWebServerFactory factory) {
    factory.setDocumentRoot(new File("../backend/src/main/webapp"));
  }
}

但它仍然不起作用,因为Spring没有接收后端/ src / main / resources / application.properties

这可能是正确的,因为它不在客户端模块的根类路径中 .

所以它并没有真正起作用 . 我想在集成测试中启动兄弟模块是不可能的 .

如何启动兄弟 spring 启动模块进行集成测试?像这样的szenarios最好的做法是什么?

1 回答

  • 1

    您可以使用TestPropertySource覆盖 application.properties 位置,如下所示:

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringApplicationConfiguration(classes = BlaApplication.class)
    @TestPropertySource(locations="/path/to/backend/src/main/resources/application.properties")
    public class ExampleApplicationTests {
    
    }
    

相关问题