【springBoot】资源文件的变量替换

在Spring Boot项目中,可以从application.ymlapplication.properties中获取pom.xml中定义的变量。为了实现在application.yml中使用pom.xml中的属性,通常需要在构建过程中将这些属性注入到资源文件中。以下是实现这一目标的几种方法:

方法1:Maven资源过滤

在Maven构建过程中,可以使用资源插件(maven-resources-plugin)的过滤功能,将pom.xml中的属性值注入到资源配置文件中。

  1. pom.xml中定义属性:
<project>
  <!-- ... -->
  <properties>
    <my.version>1.0.0-SNAPSHOT</my.version>
    <!-- 其他属性... -->
  </properties>
  
  <!-- ... -->
  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering> <!-- 开启资源过滤 -->
      </resource>
    </resources>
    
    <!-- ... -->
  </build>
  <!-- ... -->
</project>
  1. application.yml中引用Maven属性:
spring:
  application:
    name: @project.artifactId@
    version: "@my.version@"

在构建过程中,Maven会将@project.artifactId@@my.version@替换为pom.xml中对应的值。

方法2:使用Spring Boot Maven插件

Spring Boot Maven插件提供了一个特性,可以将Maven属性注入到Spring Boot的配置文件中。在pom.xml中启用这个特性:

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>...</version>
      <configuration>
        <addResources>true</addResources>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

然后在application.yml中引用Maven属性,方式同方法1。

注意事项

  • Spring Boot并不会原生支持直接在运行时读取pom.xml中的属性。上述方法依赖于Maven构建过程中的资源过滤或Spring Boot Maven插件的特殊处理。
  • 资源过滤功能可能会影响到application.yml中所有变量的处理,确保仅对预期的Maven属性进行替换,避免意外替换其他不应被替换的YAML占位符。
  • 对于方法2,Spring Boot Maven插件会确保在构建Fat JAR时将Maven属性注入到最终的application.yml中,但需要注意的是,这种方法在开发模式下(如IDE内直接运行)可能不生效,因为IDE直接运行时通常不会执行完整的Maven构建流程。

示例用法

在应用代码中读取这些属性,可以使用@Value注解或@ConfigurationProperties来注入:

@Value("${spring.application.version}")
private String applicationVersion;

或者在配置类中:

@Configuration
@ConfigurationProperties(prefix = "spring.application")
public class ApplicationProperties {
    private String name;
    private String version;
    // getters and setters...
}
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值