java—我可以选择在SpringBoot中包括/排除每个环境部署的控制器吗?

vmdwslir  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(189)

我只想将端点公开到特定的测试环境中,并在prod中完全忽略它。
我要一个单独的房间 @RestController 对于此终结点。我的问题是如何确保这个端点只能从testenv访问,而不能在生产环境中访问?
我试着和他玩 @ComponentScan ,但没走多远。

btqmn9zl

btqmn9zl1#

最好、最简单、最安全的解决方案是使用Spring轮廓。使用注解 @Profile 指定应在哪个环境中创建特定bean。请注意,如果环境与 @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 (单元/集成测试,请注意另一个文件夹)
您可以轻松地为较低的环境配置rest控制器。请记住,如果列出的任何概要文件(环境)处于活动状态,则会创建bean,因此请将其理解为 or 条款。

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

nzrxty8p2#

有办法。如果我没记错的话,基本上你可以在application.properties中设置你的环境。。然后,您可以对ednpoint说“仅当环境是dev时才可用”。
两种方式:
在项目的test部分中创建测试端点并使用@test符号,因此如果使用maven运行测试,则只运行测试端点
正常的if状态。
if(environment=dev){您做了需要测试的事情}else{静态响应表示这是一个开发端点}

相关问题