我的bug呢 2024-03-31 11:09 采纳率: 57.1%
浏览 10

maven profiles资源变量替换失败

使用maven命令在mvn install -Ddev就可以完成变量替换,但是直接通过IDEA启动Springboot项目就替换不了变量

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-31 11:09
    关注

    引自免费微信小程序:皆我百晓生

    在Maven项目中,将profile中的配置信息替换为环境变量的步骤通常涉及到以下几个步骤:

    1. 创建一个名为application.properties的文件(如果不存在的话),在其中定义环境变量,例如:

      spring.datasource.username=${nacos.username}
      spring.datasource.password=${nacos.password}
      
    2. 将上述环境变量定义复制到application.ymlpom.xml的相应位置(一般位于<build>标签内)。

    3. 在项目的Maven profile目录下创建一个新的配置文件(例如:spring.profiles.active.sample.config),并在其内容如下:

      <profiles>
        <active>
          <id>sample</id>
          <configuration>
            <spring.datasource>
              <url>jdbc:mysql://localhost:3306/${spring.datasource.username}:${spring.datasource.password}?useSSL=false</url>
              <driver-class>com.mysql.jdbc.Driver</driver-class>
            </spring.datasource>
          </configuration>
        </active>
      </profiles>
      
    4. 在对应的Java源文件(例如:src/main/resources/application.properties)中,添加相应的依赖,以引用上述配置文件:

      // application.properties
      import org.springframework.context.annotation.Configuration;
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      
      @Configuration
      public class AppConfig {
        // ...
      }
      
    5. main方法中运行应用,并使用--dev参数启动一个热部署模式(也称为"runDev"模式):

      mvn run --dev
      
    6. 使用IDEA或其他集成开发环境(IDE)启动Spring Boot项目,然后按F5键刷新浏览器,你应该可以看到已经替换的环境变量在开发环境中显示了正确值。

    注意:在实际操作中,由于 Maven 的动态配置特性,你需要确保将 application.properties 文件路径替换为实际的 .properties 文件路径。同时,在 Spring Boot 项目中,为了使每个 application.properties 对应的 <spring.datasource> 对象生效,你可能需要在 application.ymlpom.xml 中提供不同的配置信息,比如端口、数据库用户名、密码等。具体的配置信息视项目具体情况进行调整。

    以下是一个简单的示例,展示了如何在 application.propertiesapplication.yml 文件之间进行配置转换:

    application.properties 文件:

    spring.datasource.username=nacos
    spring.datasource.password=nacos
    

    application.yml 文件:

    spring:
      profiles:
        active:
          - sample
    

    pom.xml 文件:

    <build>
      <plugins>
        <!-- ... -->
        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <version>2.8.2</version>
          <executions>
            <execution>
              <phase>runtime</phase>
              <goals>
                <goal>standalone</goal>
              </goals>
              <configuration>
                <environmentVariables>
                  <spring.datasource>
                    <driverClassName>${spring.datasource.driver-class}</driverClassName>
                    <url>${spring.datasource.url}</url>
                    <username>${spring.datasource.username}</username>
                    <password>${spring.datasource.password}</password>
                  </spring.datasource>
                </environmentVariables>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
    

    在这个示例中,当运行mvn run --dev时,application.yml 文件中的配置将被读取并应用到项目的主配置文件中,而.properties 文件中的配置则不会被影响。这样,nacos.usernamenacos.password 变量就能通过 application.properties 文件中的配置得到正确的值,而这些值在热部署模式下会生效。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月31日

悬赏问题

  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)
  • ¥66 比特币地址如何生成taproot地址
  • ¥20 数学建模数学建模需要