我可以选择 include/exclude 在 Spring Boot 中为每个环境部署什么控制器吗?

Can I choose to include/exclude what controller is deployed per environment in Spring Boot?

我只想将端点公开给特定的测试环境,而在生产环境中将其完全排除。

我将为这个端点准备一个单独的 @RestController。 我的问题是如何确保此端点只能从测试环境访问,而不能在生产环境中访问?

我试过 @ComponentScan,但没走多远。

最好、最简单和最安全的解决方案是使用 Spring Profiles. Use the annotation @Profile to specify what environment a certain bean should be created on. Note that if the environment doesn't match the @Profile 注释 value,根本不会创建 bean,因此它不会出现在应用程序容器中。

假设以下 application.properties 文件定义了您要隐藏此类 REST 控制器的环境:

  • src/main/resources/application.yml(一般配置)
  • src/main/resources/application-prod.yml(生产环境)
  • src/main/resources/application-int.yml(集成环境)

...而这些您想让 REST 控制器对以下对象可见:

  • src/main/resources/application-dev.yml(开发环境)
  • src/main/resources/application-local.yml(本地主机环境)
  • src/test/resources/application-test.yml(unit/integration 测试,注意不同的文件夹)

您可以轻松地为较低的环境配置 REST 控制器。请记住,如果列出的配置文件(环境)中的 any 处于活动状态,则创建 bean,因此将其理解为 or 子句。

@Profile({"dev", "local", "test"})
@RestController
public class MyRestController {
    // implementation
}

有办法。如果我没记错的话,基本上你可以在 application.properties 中设置你的环境。然后,你可以对 ednpoint 说“只有当环境是开发时才可用”。

两种方式:

  1. 你在项目的测试部分创建你的测试端点并使用@Test符号,所以如果你运行用maven测试你只运行测试端点

  2. 一个正常的if条件。
    If (environment = dev) { 你做了你需要测试的事情} else { 静态响应说这是一个开发端点}