• 【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-SNAPSHOTmy.version>
        
      properties>
      
      
      <build>
        <resources>
          <resource>
            <directory>src/main/resourcesdirectory>
            <filtering>truefiltering> 
          resource>
        resources>
        
        
      build>
      
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    1. application.yml中引用Maven属性:
    spring:
      application:
        name: @project.artifactId@
        version: "@my.version@"
    
    • 1
    • 2
    • 3
    • 4

    在构建过程中,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.bootgroupId>
          <artifactId>spring-boot-maven-pluginartifactId>
          <version>...version>
          <configuration>
            <addResources>trueaddResources>
          configuration>
          <executions>
            <execution>
              <goals>
                <goal>repackagegoal>
              goals>
            execution>
          executions>
        plugin>
      plugins>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    然后在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;
    
    • 1
    • 2

    或者在配置类中:

    @Configuration
    @ConfigurationProperties(prefix = "spring.application")
    public class ApplicationProperties {
        private String name;
        private String version;
        // getters and setters...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    从执行class文件开始认识JVM
    QML自定义电池状进度条
    若依-整合WebSocket
    【从0到1进阶Redis】主从复制 — 主从机宕机测试
    vue3+element-plus之自定义表格
    机器学习与图像识别(二)—— OpenCV环境折腾。。
    【代码精读】ATF启动bl32程序
    使用docker安装ELK
    【LeetCode】1342.将数字变成0的操作次数
    面试突击:输入URL之后会执行什么流程?
  • 原文地址:https://blog.csdn.net/stxyg/article/details/137980831