我们目前提供不同的属性,但不是通过不同的文件夹。我们通过混合
- 春天的
PropertyPlaceholderConfigurer
- Maven 配置文件(我们用来构建开发环境的东西),
- 构建服务器(在我们的例子中是 TeamCity)
- Maven 阶段以生成正确的工件
- 启动和构建参数
我对我们所做的事情的理解是有限的,但希望这可以作为一个有用的例子,供其他人甚至我自己考虑。
正如您将在下面看到的,我们提供了指向不同属性文件的参数。每个属性文件都有一个区域/环境的配置。我将尽我所能解释当前的用途,以防它为其他人提供一些用途。
profile
为了使用 Maven 配置文件,我们在 pom中创建了一个标识,development
其中包括一个名为的区域配置属性env
。我还不完全知道它是如何在我们的项目中使用的,但是你会在下面看到我们的 POM 包括一个 Maven 编译器插件和一个 Maven Tomcat 插件。
每天,作为开发人员,我们从 IntelliJ 内部在 Tomcat 上本地运行我们的应用程序并提供env
属性。在启动时,该env
属性作为设置为的参数提供classpath*:dev-common.properties
。该文件是一个属性配置文件 - 为我们的不同区域设置占位符值。
的值env
可供我们使用PropertyPlaceholderConfigurer
示例 1profile
- pom.xml 中的 Maven 实现:
aprofile
在我们的 pom 中的实现是:
<profile>
<id>development</id>
<activation>
<property>
<name>env</name>
<value>development</value>
</property>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0-SNAPSHOT</version>
...
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
示例 2 - 用于正常构建的属性占位符配置器:
我们还使用了一个 Spring 组件,一个PropertyPlaceholderConfigurer
. 我们将它与构建参数一起使用来设置指向资源文件的类路径指针。
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>
${env}
</value>
</list>
</property>
示例 3 - 用于测试的属性占位符配置器:
我们有专门为集成测试设置的 Spring Contexts,它也使用PropertyPlaceholderConfigurer
. 这些是由集成测试类使用@ContextConfiguration(locations = {"classpath:test-dataexchange-application-context.xml"})
和@RunWith(SpringJUnit4ClassRunner.class)
) 组合而成的。
在测试上下文中,我们配置PropertyPlaceholderConfigurer
如下来获取集成测试区域的属性:
<bean id="testpropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:dev-local-common.properties</value>
</list>
</property>
其他注意事项:
我们使用 Team City 进行构建管理,但我还没有看到这些设置是如何在那里使用的,如果有的话。我可以想象有能力将上述方法结合在一起以帮助持续集成和交付。
我看不到在哪里使用了标识为的配置文件development
。这是我必须与我的团队成员一起跟进的事情。
资源: