Spring MVC Web 应用程序 - 从属性启用/禁用控制器
Posted
技术标签:
【中文标题】Spring MVC Web 应用程序 - 从属性启用/禁用控制器【英文标题】:Spring MVC web application - enabling / disabling controller from property 【发布时间】:2013-06-09 09:58:13 【问题描述】:我有一个在 Tomcat 中运行并使用 Spring MVC 定义控制器和映射的 Web 应用程序。我有以下课程:
@Controller("api.test")
public class TestController
@RequestMapping(value = "/test", method = RequestMethod.GET)
public @ResponseBody String test(HttpServletRequest httpRequest, HttpServletResponse httpResponse)
// body
我想根据某处定义的属性(例如文件)使这个控制器和“.../test”路径可用。如果该属性是假的,我希望应用程序表现得好像该路径不存在,如果它是真的,则表现正常。我怎样才能做到这一点?谢谢。
【问题讨论】:
【参考方案1】:另一种方法,可能是更简单的方法,就是在你的 RestController/Controller 中使用@ConditionalOnProperty 注解。
@RestController("api.test")
@ConditionalOnProperty(name = "testcontroller.enabled", havingValue = "true")
public class TestController
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(HttpServletRequest httpRequest, HttpServletResponse httpResponse)
// body
这里的 yml 属性中的 testcontroller.enabled 属性说,如果未设置为 true ,则永远不会创建 TestController Bean。
提示:我建议您使用 RestController 而不是 Controller,因为它默认添加了 @ResponseBody。您可以使用 @ConditionalOnExpression 来获得相同的解决方案,但由于 SpEL 评估而速度稍慢。
【讨论】:
【参考方案2】:如果您使用的是 Spring 3.1+,请使控制器仅在测试配置文件中可用:
@Profile("test")
class TestController
...
然后通过例如启用该配置文件在 Tomcat 启动时传递以下系统属性:
-Dspring.profiles.active=test
要禁用控制器,只需省略给定的配置文件。
【讨论】:
以上是关于Spring MVC Web 应用程序 - 从属性启用/禁用控制器的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC系列Spring MVC应用及ModelAndView(模型视图)
Spring Web MVC (Spring MVC) 的相关例题及解析