我可以选择 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 说“只有当环境是开发时才可用”。
两种方式:
你在项目的测试部分创建你的测试端点并使用@Test符号,所以如果你运行用maven测试你只运行测试端点
一个正常的if条件。
If (environment = dev) { 你做了你需要测试的事情} else { 静态响应说这是一个开发端点}
我只想将端点公开给特定的测试环境,而在生产环境中将其完全排除。
我将为这个端点准备一个单独的 @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 说“只有当环境是开发时才可用”。
两种方式:
你在项目的测试部分创建你的测试端点并使用@Test符号,所以如果你运行用maven测试你只运行测试端点
一个正常的if条件。
If (environment = dev) { 你做了你需要测试的事情} else { 静态响应说这是一个开发端点}