很多业务中,服务需要部署在不同机房、站点、国家。不同站点的版本不一定同步、一个版本在不同站点也可能是多套配置。
如果发布时,是对各个站点分别出版本,需要在打发布包时嵌入配置项。可以用maven的resources 插件实现分别打包。
<profile>
<id>dev</id>
<properties>
<env>local_dev</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
resource下的*.properties文件中,会写成可替换的变量,比如:
xx.xx.switch={{xx.xx.switch}}
在deploy\configuration\dev\local_dev.txt中放入
xx.xx.switch=true的变量取值
配置maven插件,可以在打包时进行内容替换。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<configuration>
<encoding>utf-8</encoding>
<useDefaultDelimiters>false</useDefaultDelimiters>
<delimiters>
<delimiter>{{*}}</delimiter>
<delimiter>[[*]]</delimiter>
</delimiters>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>p12</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>target/config</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/config</directory>
<filtering>true</filtering>
<excludes></excludes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
这边goals表示要执行插件的哪些goal,绑到了validate phase中执行。
id就是一个识别id,不重复就行。这样在打包的时候就会替换了。
像容器化这种场景,打包的时候是不含配置的,部署的时候从外面注入配置。
有配置中心的可以在运行期获取配置