用于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} value >
这里的其他答案都有很好的想法,但我正在回答,因为我自己的方法是三者的结合。 首先,不要直接在Spring XML中引用多个环境的属性文件。 只需从单个文件中工作即可。 然后,结合使用Spring的
,
,
和SpEL,您可以轻松设置非常灵活的配置。
-
与
的输出连接。 -
使用SpEL检查具有给定名称的系统属性。 如果可用,它将其用作要加载的属性文件的位置。 如果不, - 回到
,它试图对该位置进行JDNI查找。 如果那也找不到任何东西,那么 - 默认为
的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