【问题标题】:Alternative to spring profiles弹簧型材的替代品
【发布时间】:2013-07-01 15:01:12
【问题描述】:

使用 spring 3 我可以确定在运行时使用哪个 bean。但是使用 Spring 2.5 的替代方案是什么?

这是我的上下文文件中的配置:

<jee:jndi-lookup id="myDataSource" jndi-name="jdbc/mydb"
        resource-ref="true" expected-type="javax.sql.DataSource" />

我可以使用配置文件来确定是否使用此数据源,使用更早版本的 spring(早于 Spring 3)时有什么替代方案

更新:

当我在本地运行我的应用程序时,将注入“myDataSource”,在 prod 环境中,将使用“jndi”查找。要使用 Spring 3 注入“myDataSource”,我可以使用“profiles”,但如果不使用 Spring 3,我可以使用什么替代方案?

【问题讨论】:

  • 1) 但我希望某些 bean 会注入“myDataSource”。那么你真的想在某些情况下“删除”“myDataSource”bean 还是只是有其他配置? 2)这个其他配置是测试环境吗?
  • @Ralph 请查看问题更新,我只是想注入一个替代数据源,你的意思是配置,测试/生产环境?

标签: spring


【解决方案1】:

您可以将所有环境依赖 bean 定义到几个文件中,例如:

  • beans-dev.xml
  • beans-prod.xml

您的 XML 配置将是:

<beans>

<import resource="beans-${myapp.env}.xml"/>

<bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>

</beans>

在这种情况下,myapp.env 属性是 JVM 系统属性,即配置为 -Dmyapp.env=dev-Dmyapp.env=prodmyapp.env 无法从属性占位符设置,因为 Spring &lt;import&gt; 已在 属性占位符之前解析。

【讨论】:

    【解决方案2】:

    您需要自己构建这种东西。通常通过为每个配置文件维护多个不同的文件组合在一起,以及在运行时选择正确文件的约定。 A -D 系统属性可以帮助你选择哪一个。比如我们可以有applicationContext-dev.xml和applicationContext-prod.xml,我们的applicationContext.xml会导入applicationContext-${activeProfile}.xml,你可以设置和加载-DactiveProfile=dev;您可以从 Spring3 配置文件的设计方式中推断出其他一些约定,例如 web.xml 中的上下文参数等。

    【讨论】:

      猜你喜欢
      • 2017-09-02
      • 2012-12-18
      • 1970-01-01
      • 2012-08-05
      • 2020-03-01
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多