在Web项目中以开发模式运行

时间:2013-09-16 09:07:24

标签: java spring

我有一个基于maven构建工具的Spring MVC项目。在我的应用程序中,我必须对外部服务器进行Web服务调用以获取某些数据。我已经实现了它,一切运作良好。

但在开发模式中,我宁愿避免它们。所以目前我有

public static boolean devel = false

我使用上面的布尔值和if else语句,以便在开发模式下,然后提供静态数据。如果不是开发模式,则进行Web服务调用。

但我觉得这个布尔声明很脏。从某种意义上说,每次我在生产中部署它时,我都必须手动修改代码中的布尔值。一旦我忘记那造成了破坏。

有没有好的方法?我不希望在代码中声明此变量,而是在构建过程中获得的某个常量或者可能是某些VM参数。或者他们甚至可能是一个更好的方式。如果是这样,我如何将其纳入我的春季项目。

3 个答案:

答案 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功能。这正是场景的类型,依赖注入对于。

非常有用

然后,您将声明一个接口,该接口由两个不同的类实现:

  1. 真正的类 - 连接到远程服务器,
  2. 返回静态数据的开发/测试类。
  3. 然后,您的启动配置将确定将哪两个类注入您的应用程序。

答案 2 :(得分:1)

Spring(3.1+)提供了一种指定@Profile的方法,可以与@Configuration注释一起使用。看看http://spring.io/blog/2011/02/14/spring-3-1-m1-introducing-profile/

使用该方法,您可以为每个环境(生产,开发,登台等)创建自己的配置bean