【问题标题】:How to make a Spring Application' Business Logic User Configurable?如何使 Spring 应用程序的业务逻辑用户可配置?
【发布时间】:2014-03-05 17:28:39
【问题描述】:

我是一名开发人员,开发基于 Spring 框架的 Java Web 应用程序。 此应用程序将部署到几个不同的客户。 有一个类包含一些对每个客户端都不同的业务逻辑。 从 Spring 框架的角度来看,只需为每个客户端连接适当的类(作为 bean)就足够了。

但是,开发人员不负责应用程序的部署。运营团队负责,让他们打开 WAR 文件并为每个客户端部署修改 spring 配置 XML 可能对他们要求太多了。属性文件没问题,但修改内部文件 - 可能不行。

还有其他人想出解决这个问题的策略吗?

编辑:

举个例子说明我在说什么:

public interface IEngine {
  void makeNoise();
}

public class Car {
  public void setEngine(IEngine engine) {
    this.engine = engine;
  }
}

客户A的业务逻辑:

HeavyDutyEngine implements IEngine {
  public void makeNoise() {
    System.out.println("VROOOM!");
  }
}

客户B的业务逻辑:

LightWeightEngine implements IEngine {
  public void makeNoise() {
    System.out.println("putputput");
  }
}

在 Spring 配置 XML 中:

对于客户端 A,它可能如下所示:

<bean id="hdEngine" class="HeavyDutyEngine" />
<bean id="lwEngine" class="LightWeightEngine" />

<bean id="car" class="Car">
  <property name="engine" ref="hdDngine">
</bean>

对于客户端 B,它可能如下所示:

<bean id="hdEngine" class="HeavyDutyEngine" />
<bean id="lwEngine" class="LightWeightEngine" />

<bean id="car" class="Car">
  <property name="engine" ref="lwEngine">
</bean>

【问题讨论】:

  • 我们需要看看各个客户端之间的业务逻辑有哪些变化。
  • 它基本上只是根据客户端换入/换出某些bean。

标签: java spring customization


【解决方案1】:

要为不同的环境配置 Spring,可以使用名为 spring "profiles" 的概念。 (在 Spring 3.1 中引入)

您有不同的方法来启用/禁用此属性。例如 java 属性参数。 但是由于您使用的是 WAR,因此使用了一些 Servlet 容器,我建议将此配置放在 Servlet 容器中。

例如,在 tomcat 中,您可以将此行放在 context.xml(全局或特定于应用程序)中以启用配置文件

<Parameter name="spring.profiles.active" value="myProfile"/>

【讨论】:

  • 谢谢,我正在研究 Spring 的配置文件功能。
【解决方案2】:

如果您正在使用某个配置,您可以将一些配置移至 DB。

你可以使用这样的东西

 ref="{ref-name}"

其中ref-name 可以通过配置PropertyPlaceholderConfigurer 使用属性文件(默认)解析。

或者您可以在 PropertyPlaceholderConfigurer 上编写自己的包装器,它将从可部署的 WAR 文件外部的数据库表中获取值。

在我的一个项目中,我们使用这种方法来解决自定义依赖项。查找 DB 的包装器用于优先考虑,如果 DB 没有键/值对,则使用属性文件(捆绑在 WAR 中)来解决依赖关系。

这也将允许您从 DB 外部更改一些值,但是对于 IBM Websphere,我们需要回收服务器以进行更改。

【讨论】:

    猜你喜欢
    • 2016-10-11
    • 2015-11-10
    • 2011-01-20
    • 2013-01-10
    • 1970-01-01
    • 2010-11-11
    • 2017-08-25
    • 1970-01-01
    • 2016-09-09
    相关资源
    最近更新 更多