受这个问题的启发:
How to manage Configuration Settings for each Developer
如何管理必须为每个开发人员设置的应用程序配置设置,而不将其检入Java平台上的源代码控制 ?
例如,这就是我们现在正在做的事情:
数据源配置存储在Spring配置xml文件中。
目前,每个开发人员都会编辑该文件,并尽力不将该文件提交到源代码管理中。我们中的一些人在对我们的本地数据库执行测试之前应用了代码(diff文件),并在检查代码之前删除补丁。其他开发人员手动编辑和恢复配置文件。
可悲的是,补丁已经过时了。人们有时会忘记在提交之前恢复其本地配置。
但是,我的问题不仅限于数据库连接设置。我想找到一个解决方案,每个开发人员都可以覆盖应用程序配置设置,而无需更改源控制文件。
如果我们必须改变存储配置设置的方式,那么我认为我们应该这样做(也许是JNDI?,外部配置文件在众所周知的路径中?,我不知道)
你会做什么/你做过什么?
答案 0 :(得分:2)
将配置文件放在外部目录中。如果不存在,请读取默认配置文件。外部目录可以配置,并且可以具有默认值,例如c:\workspace\config
。
可选地,在构建期间,您可以将外部属性复制到构建工件中。
答案 1 :(得分:2)
我们使构建完全自包含,包括本地H2 / Hipersonic / JavaDB数据库和Ruby邮件服务器等。这意味着本地构建没有特定于开发人员的配置,所有内容都只指向预打包的组件。这也意味着除了基础知识(JVM,Ruby,Editors)之外,没有时间配置开发人员框。
缺点是您的代码结帐有点大。
答案 2 :(得分:2)
将模板文件(如sample.context.xml)检入源代码管理中。每个开发人员将该文件复制到context.xml并进行他喜欢的任何修改。如果真实配置文件位于源控制的目录中,请将其添加到svn:ignore以防止意外签入。
==>没有意外提交和持久的本地配置设置。
如果缺少本地配置文件,则应用程序无法启动。这使新团队成员明白可以配置 设置。显然,continuos集成服务器也需要一个本地设置文件。
关于放置该配置的位置:如果特定于实例的配置不是.war文件的一部分,则会使构建和部署更容易。我们使用JNDI条目,可以使用<j2ee:jndiLookup>
从弹簧配置文件中轻松查找。
答案 3 :(得分:1)
拥有这些配置的最佳位置是数据库。并在生产代码中添加几行,以便阅读这些配置。只要目的得到解决并且一切都是一致和连贯的,这意味着没有害处。放置一个小框架,读取这些配置并覆盖生产中出现的默认配置。
幸运的是,像Rails这样的一些框架确实提供了这些,我很确定它在Java中的灵活性。
答案 4 :(得分:1)
我们在这里做的一件事就是拥有一个属性加载器,它首先检查系统属性。
e.g。你有一个名为datasource.url
的属性,它被加载到你的Spring文件中。
我们扩展了ResourceLoader以首先检查系统属性以查看是否存在具有该名称的属性,如果是,则将其加载而不是使用属性文件中的值。 (实际上我认为Spring的ResourceBundleMessageSource如果你配置它就开箱即用,但是我们想要一些我不会涉及的自定义行为。)
因此,如果我们使用一些额外的命令行参数启动我们的应用程序:
-Ddatasource.url=[local-datasource-url]
然后它会覆盖属性文件中的值。
显然,对于Swing应用程序(我们的应用程序)而言,这比Web应用程序更容易,但仍有可能。