我们都知道因为springboot自身也是用了${}占位符替换,所以spring-boot-starter-parent中定义

<resource.delimiter>@</resource.delimiter>

使用@符号作为占位符,防止和maven冲突。今天在bootstrap.yml也使用@符号替换maven变量却发现不生效,进入 spring-boot-starter-parent 才发现有如下配置,也就是说springboot除了定义@符号作为占位符之外,其实还限制了其替换范围!

所以为了增加对bootstrap.yml文件的支持,增加以下配置,注意资源要include和exclude成组,否则resources文件夹下其他文件不会被拷贝!

<resources>
	<!-- springboot 默认只替换application*.[yml,yaml,properties]相关文件,我们项目中在bootstrap中需要替换配置中心等相关变量 -->
	<resource>
		<filtering>true</filtering>
		<directory>${basedir}/src/main/resources</directory>
		<includes>
			<include>**/bootstrap*.yml</include>
			<include>**/bootstrap*.yaml</include>
			<include>**/bootstrap*.properties</include>
		</includes>
	</resource>
	<!-- 必须成组否则文件夹下其他资源无法拷贝 -->
	<resource>
		<directory>${basedir}/src/main/resources</directory>
		<excludes>
			<exclude>**/bootstrap*.yml</exclude>
			<exclude>**/bootstrap*.yaml</exclude>
			<exclude>**/bootstrap*.properties</exclude>
		</excludes>
	</resource>
</resources>