我有一个基于maven构建工具的Spring MVC项目。在我的应用程序中,我必须对外部服务器进行Web服务调用以获取某些数据。我已经实现了它,一切运作良好。
但在开发模式中,我宁愿避免它们。所以目前我有
public static boolean devel = false
我使用上面的布尔值和if else
语句,以便在开发模式下,然后提供静态数据。如果不是开发模式,则进行Web服务调用。
但我觉得这个布尔声明很脏。从某种意义上说,每次我在生产中部署它时,我都必须手动修改代码中的布尔值。一旦我忘记那造成了破坏。
有没有好的方法?我不希望在代码中声明此变量,而是在构建过程中获得的某个常量或者可能是某些VM参数。或者他们甚至可能是一个更好的方式。如果是这样,我如何将其纳入我的春季项目。
答案 0 :(得分:3)
我要做的是将代码默认为生产行为,所以像bool devel来自属性文件。 classpath = false和中的默认值 为了覆盖它,我会使用类似的东西:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true"/>
<property name="locations">
<list>
<value>classpath:config.properties</value>
<value>${external-config}</value>
</list>
</property>
</bean>
在我的开发机器上我用
运行我的应用程序-Dexternal-config=file:/c:/debug.properties
该属性文件包含一些占位符,该占位符覆盖存储在jar / war中的config.properties中的值
答案 1 :(得分:1)
我认为“体面的方式”(正如你所说的)是使用依赖注入;使用Spring或Java CDI功能。这正是场景的类型,依赖注入对于。
非常有用然后,您将声明一个接口,该接口由两个不同的类实现:
然后,您的启动配置将确定将哪两个类注入您的应用程序。
答案 2 :(得分:1)
Spring(3.1+)提供了一种指定@Profile的方法,可以与@Configuration注释一起使用。看看http://spring.io/blog/2011/02/14/spring-3-1-m1-introducing-profile/
使用该方法,您可以为每个环境(生产,开发,登台等)创建自己的配置bean