为不同环境定义Spring bean时的常用策略
定义一堆bean的常用策略是什么,这些bean在开发和生产环境中的使用方式不同?
假设我有2个bean,每个bean实现相同的接口。 一个bean用作本地文件系统的抽象,另一个bean连接到分布式文件系统。 为了使开发尽可能稳定,开发环境应该使用本地文件系统实现,生产版本使用分布式文件系统bean。
目前我正在做的是有两个xml定义。
native.xml
distributed.xml
在创建应用程序上下文时,我根据环境省略native.xml
或distributed.xml
并获取resourceSystem
bean。
Spring中是否有适当的工具或最佳实践来为不同的环境配置bean定义?
谢谢。
以下是Spring参考文档中关于PropertyPlaceholderConfigurer的内容
PropertyPlaceholderConfigurer不仅在您指定的Properties文件中查找属性, 而且如果找不到您尝试使用的属性, 也会检查Java System属性 。
如上所示,您可以设置Java System属性
在开发机器上
-Dprofile=development
在生产机器上
-Dprofile=production
因此,您可以定义全局应用程序上下文设置, 导入每个分层上下文设置,如下所示
请记住,所有位置路径都与执行导入的定义文件相关
因此,Spring支持这种配置
通常最好为这样的绝对位置保持间接,例如,通过“$ {…}”占位符在运行时针对JVM系统属性解析 。
这就是我在许多项目中使用的内容。 将所有与环境无关的bean放在common.xml中,将所有其他bean放在dev.xml / qa.xml / prod.xml中 。 如果您使用ant来构建项目,那么将环境作为构建过程的参数提供,并让构建脚本包含适当的env.xml并省略其他内容。 我的意思是,构建脚本将dev.xml复制为env.xml(如果是dev环境)或qa.xml复制为env.xml(如果是QA)。 因此,加载bean定义的代码将始终使用“common.xml,env.xml”。
此function在SpringSource的雷达上,并将在未来版本中使用。
看到这里和这里 。