从 IntelliJ 启动时无法激活 Spring 引导配置文件

Posted

技术标签:

【中文标题】从 IntelliJ 启动时无法激活 Spring 引导配置文件【英文标题】:It is not possible to activate the Spring boot profile when starting from IntelliJ 【发布时间】:2021-12-20 15:27:15 【问题描述】:

我无法在 IntelliJ IDEA 中激活 Spring 下载配置文件。

Java 17

IntelliJ IDEA 2021.3 Beta(终极版)

<spring.version>5.3.9</spring.version>

我来了 Run |编辑配置... 在我规定的虚拟机选项中

-Dspring.profiles.active=development

当你从 IDE 启动应用程序时,会出现以下错误崩溃:

Error: Could not find or load main class VM
Caused by: java.lang.ClassNotFoundException: VM

同时,我设法使用此选项手动启动它:

java -jar main-ms-1.2-SNAPSHOT.jar --spring.profiles.active=development

我还需要在我错过的 IDE 中注册什么? 我清理了缓存。重新检查了所有设置。没有什么帮助。我不明白问题可能是什么。同时,其他项目开发商不存在这个问题。使用 -Spring.profiles.active=development 标志,应用程序在 IDEA 中启动

Pom.xml 中的配置文件 这是一个共享文件Pom.xml,是整个微服务项目的根目录。

<profiles>
    <profile>
      <id>development</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <build.profile.id>development</build.profile.id>
        <maven.file.path>file:$project.basedir/../../../maven</maven.file.path>
        <releases.maven.repository.url>$maven.file.path/releases</releases.maven.repository.url>
        <snapshots.maven.repository.url>$maven.file.path/snapshots
        </snapshots.maven.repository.url>
        <docker.registry.domain>localhost:5000</docker.registry.domain>
        <docker.registry.url>http://$docker.registry.domain</docker.registry.url>
      </properties>
    </profile>
</profiles>

这是我试图运行的微服务 pom.xml 文件。

  <dependencies>
    <dependency>
      <groupId>com.asvoip.ump</groupId>
      <artifactId>ump-it-lib</artifactId>
      <version>1.1-SNAPSHOT</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.asvoip.ump</groupId>
      <artifactId>ump-currencymanager-api</artifactId>
      <version>1.2-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>com.asvoip.ump</groupId>
      <artifactId>ump-sqldbclient-lib</artifactId>
      <version>1.2-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>com.asvoip.ump</groupId>
      <artifactId>ump-restapiserver-lib</artifactId>
      <version>1.1-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>com.asvoip.ump</groupId>
      <artifactId>ump-documentation-lib</artifactId>
      <version>1.1-SNAPSHOT</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    <dependency>
      <groupId>de.codecentric</groupId>
      <artifactId>spring-boot-admin-starter-client</artifactId>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-boot-starter</artifactId>
    </dependency>

    <dependency>
      <groupId>co.elastic.logging</groupId>
      <artifactId>logback-ecs-encoder</artifactId>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-xml</artifactId>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>io.fabric8</groupId>
        <artifactId>docker-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

文件 application.yaml

spring.config.activate.on-profile: development

【问题讨论】:

你好。请参阅:Do posts have to be in English on Stack Exchange? 使用 edit 选项并将其翻译为英语或将其移动(从此处删除并重新发布到适当的位置)到使用您的语言的适当 StackExchange 站点(如果存在 - 请访问此评论中的第一个链接查找有关其他语言编程问题的网站列表)。 为什么你使用-Dspring.profiles.active=development作为VM选项,而你在命令行中使用--spring.profiles.active=development作为参数?命令行参数在运行/调试配置中指定 | 程序参数: IDE 中的字段。 因为在此站点上的类似问题中,建议使用 VM 选项 -Spring.profiles.active=development 在命令行上,通过反复试验,我设法使用--spring.profiles.active=开发选项。我尝试在 VM 中使用此选项,但没有任何结果 你能在 GitHub 中推送项目并分享相同的链接吗? 能否请您在 IntelliJ 中使用环境变量 SPRING_PROFILES_ACTIVE=development 试试 【参考方案1】:

我不确定最新的 Intellij Ultimate 是否更改了 UI。我通常从Edit Configuration &gt; under Enviromnet &gt; Active Profile(适用于 2020 Intellij 版本)设置活动配置文件,将您的配置文件名称放在那里,然后保存。删除-Dspring.profiles.active=development,然后尝试

确保您的项目中有一个名为 application-development.propertiesapplication-development.yml 的 spring 属性文件

【讨论】:

【参考方案2】:

您在 pom.xml 中定义的 Profile 是一个 maven 构建配置文件,与 spring config-property 配置文件无关。

maven-profile:https://maven.apache.org/guides/introduction/introduction-to-profiles.html 弹簧型材:https://docs.spring.io/spring-boot/docs/2.6.x/reference/html/features.html#features.profiles

spring.config.activate.on-profile: development 如果没有活动配置文件名为development,则关闭当前配置文档。所以,这就像 config-properties 的过滤器。

而且您不必告诉 spring 将使用的所有配置文件。因此,只有当文档包含您想要打开或关闭的一些应用程序属性时,该行才有意义。 这些配置文件通过 IntelliJ 中的启动配置进行控制。

对于 maven-profile,您可以在 IntelliJs maven 选项卡中启用/禁用它们。 见:Work with maven profiles

【讨论】:

您可以在那里添加设置。但是我所有的设置都和你的一样。我从指定配置文件的应用程序 file.yaml 添加了信息。我指定了 IDEA 版本,它是最新的。

以上是关于从 IntelliJ 启动时无法激活 Spring 引导配置文件的主要内容,如果未能解决你的问题,请参考以下文章

从 IntelliJ 社区版启动 Spring Boot 应用程序

intellij idea 无法启动或调试 spring-boot

无法在 IntelliJ Idea 中启动 spring-boot 应用程序

无法从通过intellij运行的spring boot应用程序连接到我在docker上运行的kafka

当 spring-boot 运行时 IntelliJ 进程以退出代码 0 完成

无法从 IntelliJ IDEA 12.1.4 Ultimate (Windows 7) 启动 Apache Tomcat 6