spring boot通过maven filter替换properties属性 为啥失败

2020-08-25 17:28:36 891

问题

在做springboot整合redisson的时候,将redisson的redis链接信息设置在配置文件中。但是由于系统设置了多环境的配置。每个环境的redis配置不一样,故需要引入对应环境的配置。如下:

image.png

结果在启动项目的时候,发现并没有解析读取到redis的相关配置。

uploadimage-20200826-1598422845164-089031.png


分析&解决

查看编译完的文件,发现此时并没有将值替换掉,还是原有的${redis.host}等,

image.png


查看了一下其他编译完的文件发现只有多环境设置激活的profile(spring.profiles.active=@profiles.active@)使用的是@才被正常替换了。

而后查看了POM文件的配置,发现是继承了spring-boot-starter-parent:

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.0.5.RELEASE</version>
   <relativePath/> <!-- lookup parent from repository -->
</parent>

而在spring-boot-starter-parent中设置了<resource.delimiter>@</resource.delimiter>。

image.png


至此,关于编译后的资源文件中的${redis.host}并没有被正常替换的原因找到了,正是因为parent设置了resource.delimiter为@,所以${redis.host}没有被正常解析替换。

此处贴出POM文件的build配置,方便有出现类似问题的朋友核对:

<build>
   <finalName>ROOT</finalName>
   <filters>
      <!-- 使用filters中指定的文件中的配置对resource中的引用变量进行解析 -->
      <filter>src/main/resources/application-${profiles.active}.properties</filter>
   </filters>
   <plugins>
      .....
   </plugins>
   <resources>
      <resource>
         <directory>src/main/resources</directory>
         <filtering>false</filtering>
         <excludes>
            <exclude>application-dev.properties</exclude>
            <exclude>application-test.properties</exclude>
            <exclude>application-prod.properties</exclude>
         </excludes>
      </resource>
      <resource>
         <directory>src/main/resources</directory>
         <filtering>true</filtering>
         <includes>
            <include>application-${profiles.active}.properties</include>
            <include>application.yml</include>
            <include>redisson-config.yml</include>
         </includes>
      </resource>
   </resources>
</build>


注意:在build中需要加入<filters><filter>环境文件路径<filter><filters>,用于对resource中的引用变量进行解析


解决方案

方法一:修改resource.delimiter

<properties>
	<resource.delimiter>${}</resource.delimiter>
</properties>

方法二:将redisson-config.yml中的redis配置调整为:

singleServerConfig:
    address: redis://@redis.host@:@redis.port@
    password: @redis.password@

方法三:pom.xml不继承spring-boot-starter-parent,不过这样的话,所导入的依赖就需要设置版本号。




相关文章

分类

{{name}}

标签

{{name}}

相关文章

广告区域
没有相关数据