使用预定义配置文件运行 Spring Boot JAR

big*_*_OS 2 java spring jar executable-jar

我正在尝试使用该命令运行我的 JAR 文件java -jar sample.jar,并且我正在使用application.yml具有以下设置的配置文件

spring:
  profiles:
    active:
      - dev
---
server:
  port: 8081
spring:
  profiles: dev
---
server:
  port: 8082
spring:
  profiles: test
Run Code Online (Sandbox Code Playgroud)

但应用程序无法识别返回信息
No active profile set, falling back to default profiles: default并将端口设置为默认 8080 的配置文件

我尝试过类似
java -jar sample.jar -Drun.jvmArguments=-Dspring.profiles.active=dev
java -jar sample.jar -Dspring.profiles.active=dev

在我的pom.xml文件中,我所做的唯一更改是添加<packaging>jar</packaging>属性。

据我所知,maven 配置文件是完全不同的东西,不应该影响 spring 配置文件。

我不知道在哪里寻找问题,因为当我通过Intellij IDEA 中的“运行”按钮启动应用程序时,它工作得很好,并且将每个配置文件设置为活动状态。

这里的实际问题是如何在构建工件时设置要运行的默认配置文件,这样就不需要在运行 jar 的终端命令中放置额外的标志。

我知道有很多像我这样的问题,但他们接受的大多数答案在我的情况下不起作用,其余的也没有得到解答。如果您知道这里可能存在什么问题,请告诉我。预先感谢您的任何帮助!

小智 11

您可以通过命令行参数激活配置文件。在您的尝试中,您在 jar 名称之后定义活动配置文件。您需要在正在运行的 jar 名称之前提供程序参数。

java -jar -Dspring.profiles.active=dev  sample.jar
Run Code Online (Sandbox Code Playgroud)

设置活动配置文件的另一种方法是创建application.properties具有以下属性的文件:

spring.profiles.active=prod

Run Code Online (Sandbox Code Playgroud)

  • 因此,这里的顺序很重要 - `java -jar -Dspring.profiles.active=dev example.jar` 命令设法将配置文件设置为 `dev`,但没有对配置进行任何更改。虽然“dev”配置文件处于活动状态,但我希望应用程序在端口 8081 上运行,但仍具有默认值 8080。您知道导致此行为的原因吗? (2认同)