Java 我可以选择在Spring Boot中包括/排除每个环境部署的控制器吗?
我只想将端点公开给特定的测试环境,并将其完全保留在PROD中 我将为此端点使用一个单独的Java 我可以选择在Spring Boot中包括/排除每个环境部署的控制器吗?,java,spring,spring-boot,devops,Java,Spring,Spring Boot,Devops,我只想将端点公开给特定的测试环境,并将其完全保留在PROD中 我将为此端点使用一个单独的@RestController。 我的问题是如何确保该端点只能从测试环境访问,而不能在生产环境中访问 我试着使用@ComponentScan,但没有走多远。最好、最简单、最安全的解决方案是使用。使用注释指定应该在什么环境中创建特定bean。请注意,如果环境与注释值不匹配,则根本不会创建bean,因此它不会出现在应用程序容器中 假设以下application.properties文件定义了要隐藏此类REST控制
@RestController
。
我的问题是如何确保该端点只能从测试环境访问,而不能在生产环境中访问
我试着使用
@ComponentScan
,但没有走多远。最好、最简单、最安全的解决方案是使用。使用注释指定应该在什么环境中创建特定bean。请注意,如果环境与注释值不匹配,则根本不会创建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
(单元/集成测试,请注意另一个文件夹)
您可以轻松地为较低的环境配置REST控制器。请记住,如果列出的任何概要文件(环境)处于活动状态,就会创建bean,因此请将其理解为或子句
@Profile({"dev", "local", "test"})
@RestController
public class MyRestController {
// implementation
}
有办法。如果我没记错的话,基本上你可以在application.properties中设置你的环境。。然后,您可以对ednpoint说“仅当环境为dev时才可用”
两种方式:
在项目的测试部分创建测试端点,并使用@test符号,因此如果使用maven运行测试,则只运行测试端点
正常的if状态
如果(environment=dev){您做了需要测试的事情}否则{静态响应说这是一个开发端点}
我认为@ConditionalOnProperty
会帮助您从属性文件中为env检查kc,然后——如果(env.equals(“test”))返回redirect
到404 0r 403,您可以使用@Profile
注释您的控制器bean,并使用单独的概要文件启动开发和测试。