用于localhost,开发和生产的Spring数据源配置

我试图弄清楚我的Spring应用程序如何确定它的部署位置并加载适当的数据源。 我们有3个环境……我的本地,开发服务器和生产服务器。 到目前为止,我有3个属性文件调用

localhost.datasource.properties development.datasource.properties production.datasource.properties 

我让他们像这样:

       classpath:/resources/properties/production.datasource.properties classpath:/resources/properties/development.datasource.properties classpath:/resources/properties/localhost.datasource.properties      

当我在我的localhost机器上时,这很好用。 如果我将war文件部署到开发中,它仍然在读取localhost属性,因为它是列表中的最后一个,我收到错误。 实现这个的最佳方法是什么?

谢谢

对于数据源,最简单的方法是定义数据源并让容器管理连接池。

为此,请在web.xml中定义对数据源的资源引用

  DB Connection jdbc/MyDataSource javax.sql.DataSource Container  

并在spring引用它:

  

然后,您可以在应用程序服务器中定义数据源,这意味着您可以更改基础数据库。 对于websphere,这将通过websphere控制台完成。 在tomcat的情况下,它将通过Context.xml完成​​:

  ...   

这样,您只需要更改上下文以部署到开发,测试和生产,并且不要将应用程序绑定到特定数据库。

将系统属性传递给属性占位符,但包含WAR中的所有三个文件:

    classpath:/resources/properties/${myenv}.datasource.properties    

看看这里: http : //blog.jayway.com/2010/10/21/environment-specific-configuration-of-spring-applications/您可以在您的应用程序中使用默认配置,并可选择使用文件覆盖它在文件系统上的预定义位置。

两种解决方案

  • 使用通用名称有一个值而不是三个值,并且在构建配置中提供一个标志,应将属性文件复制到该路径/文件名。

  • 在启动服务器时将属性作为VM参数提供,如-Ddatasource.properties = c:\ config \ development.datasource.properties,并在XML配置文件中 file:/// $ {datasource.properties}

这里的其他答案都有很好的想法,但我正在回答,因为我自己的方法是三者的结合。 首先,不要直接在Spring XML中引用多个环境的属性文件。 只需从单个文件中工作即可。 然后,结合使用Spring的和SpEL,您可以轻松设置非常灵活的配置。

  1. 的输出连接。
  2. 使用SpEL检查具有给定名称的系统属性。 如果可用,它将其用作要加载的属性文件的位置。 如果不,
  3. 回到 ,它试图对该位置进行JDNI查找。 如果那也找不到任何东西,那么
  4. 默认为default-value属性给出的硬编码类路径位置。

由于所有选项,无论您处于何种环境,此设置都可以轻松指定属性文件位置。

我会考虑使用Cocoon Spring Configurator,它可以独立使用,而不需要Cocoon项目的其余部分:

http://cocoon.apache.org/subprojects/configuration/spring-configurator/index.html

我发现这篇博文对入门非常有用:

http://mrhaki.blogspot.com/2009/02/use-spring-configurator-to-support.html