如何使用Spring Boot配置文件

时间:2016-10-15 15:39:09

标签: java spring spring-boot

我有application.ymlapplication-dev.ymlapplication-dev.yml

  1. 我正在使用maven命令mvn spring-boot:run -Dspring.profiles.active=dev它不起作用,我无法使用mvn spring-boot:run选择开发配置文件。我该如何选择?
  2. 文档说java -jar XXX.jar --spring.profiles.active=dev有效,我尝试-Dspring.profiles.active=dev但它不起作用。在我的项目中,我使用java -jar XXX.jar它运行,但如果我使用java -jar XXX.jar --spring.profiles.active=dev选择开发配置文件,控制台打印这么多日志并警告我从未见过使用java -jar XXX.jar,并告诉我APPLICATION FAILED TO START
  3. 那么如何解决两个问题呢?感谢〜

13 个答案:

答案 0 :(得分:37)

我不确定我是否完全理解这个问题,但我会尝试通过在Spring Boot中提供有关配置文件的一些详细信息来解答。

对于您的#1示例,根据文档,您可以使用-Drun.profiles使用Spring Boot Maven插件选择配置文件。

修改:对于Spring Boot 2.0+ run已重命名为spring-boot.run

mvn spring-boot:run -Drun.profiles=dev

http://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html

在#2示例中,您将在jar名称后面定义活动配置文件。您需要在正在运行的jar的名称之前提供JVM参数。

java -jar -Dspring.profiles.active=dev XXX.jar

一般信息:

您提到您同时拥有application.ymlapplication-dev.yml。使用dev配置文件运行实际上会加载两个配置文件。来自application-dev.yml的值将覆盖application.yml提供的相同值,但会加载yml个文件中的值。

还有多种方法可以定义活动配置文件。

您可以像在运行jar时使用-Dspring.profiles.active一样定义它们。您还可以使用SPRING_PROFILES_ACTIVE环境变量或spring.profiles.active系统属性设置配置文件。

更多信息可以在这里找到: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-set-active-spring-profiles

答案 1 :(得分:7)

如果您使用的是Spring Boot Maven插件,请运行:

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar

https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html

答案 2 :(得分:4)

你不需要三个.yml文件。您可以拥有一个application.yml文件,并在每个配置文件节以3连字符分隔的相同内容中编写配置文件特定属性(---)

接下来,为了选择当前活动的配置文件,您也可以在application.yml文件中指定它,如下所示:

spring:
  profiles:
    active:
    - local

但是,如果设置环境变量,则会覆盖此配置,例如: SPRING_PROFILES_ACTIVE = dev

以下是您要求的示例文件:

# include common properties for every profile in this section

server.port: 5000 

spring:
  profiles:
    active:
    - local

---
# profile specific properties

spring:
  profiles: local

  datasource:
    url: jdbc:mysql://localhost:3306/
    username: root
    password: root

---
# profile specific properties

spring:
  profiles: dev

  datasource:
    url: jdbc:mysql://<dev db url>
    username: <username>
    password: <password>

答案 3 :(得分:2)

如果您使用的是maven,请在pom.xml中定义如下所示的配置文件

<profiles>
<profile>
    <id>local</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <jdbc.url>dbUrl</jdbc.url>
        <jdbc.username>dbuser</jdbc.username>
        <jdbc.password>dbPassword</jdbc.password>
        <jdbc.driver>dbDriver</jdbc.driver>
    </properties>
</profile>
<profile>
    <id>dev</id>
    <properties>
        <jdbc.url>dbUrl</jdbc.url>
        <jdbc.username>dbuser</jdbc.username>
        <jdbc.password>dbPassword</jdbc.password>
        <jdbc.driver>dbDriver</jdbc.driver>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
    </dependencies>
</profile>
<profile>
    <id>prod</id>
    <properties>
        <jdbc.url>dbUrl</jdbc.url>
        <jdbc.username>dbuser</jdbc.username>
        <jdbc.password>dbPassword</jdbc.password>
        <jdbc.driver>dbDriver</jdbc.driver>
    </properties>
</profile>

默认情况下,即,如果未选择任何配置文件,则将始终使用本地配置文件。

要在Spring Boot 2.x.x中选择特定的配置文件,请使用以下命令。

mvn spring-boot:run -Dspring-boot.run.profiles=dev

如果要使用特定配置文件的属性进行构建/编译,请使用以下命令。

mvn clean install -Pdev -DprofileIdEnabled=true

答案 4 :(得分:1)

如果您使用的是Maven,

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <profiles>
                        <profile>dev</profile>
                    </profiles>
                </configuration>
            </plugin>
        </plugins>
    </build>

将此开发人员设置为有效个人资料

./mvnw spring-boot:run

将dev作为活动配置文件。

答案 5 :(得分:1)

自Spring Boot v2 +起

我已经通过Spring Boot v2.3.5.RELEASE进行了验证

带有Spring Boot Maven插件

您可以像这样提供commandline argument

#include <algorithm> #include <cctype> #include <fstream> #include <iostream> #include <iterator> #include <string> #include <vector> struct Student { std::string name, studentID; int credits; float gpa; friend std::ostream &operator<<(std::ostream &, const Student &); friend std::istream &operator>>(std::istream &, Student &); }; std::ostream &operator<<(std::ostream &out, const Student &s) { out << s.name << ' ' << s.studentID << ' ' << s.credits << ' ' << s.gpa << '\n'; return out; } std::istream &operator>>(std::istream &in, Student &s) { s.name.clear(); std::string str; while (in >> str && std::none_of(str.begin(), str.end(), ::isdigit)) s.name += str + ' '; s.name.pop_back(); s.studentID = str; in >> s.credits >> s.gpa; return in; } int main() { std::ifstream is("lab9input.dat"); std::vector<Student> v(std::istream_iterator<Student>(is), {}); auto max_gpa = std::max_element(v.begin(), v.end(), [](auto &a, auto &b) { return b.gpa > a.gpa; })->gpa; std::cout << "The highest GPA student(s) is(are): \n"; for (auto &i : v) if (i.gpa == max_gpa) std::cout << i; }

您可以像这样提供JVM argument

mvn spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=dev"

java -jar

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev" (注意顺序)

java -Dspring.profiles.active=dev -jar app.jar(音符顺序)

答案 6 :(得分:0)

您可以在一个 application.properties(yml)中指定属性,例如here。然后 mvn clean spring-boot:run -Dspring.profiles.active=dev应正确运行。它对我有用

答案 7 :(得分:0)

  

@Profile批注允许您指示组件是   一个或多个指定配置文件符合条件时可以进行注册   活性。使用上面的示例,我们可以重写dataSource   配置如下:

@Configuration
@Profile("dev")
public class StandaloneDataConfig {

    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.HSQL)
            .addScript("classpath:com/bank/config/sql/schema.sql")
            .addScript("classpath:com/bank/config/sql/test-data.sql")
            .build();
    }
}

另外一个:

@Configuration
@Profile("production")
public class JndiDataConfig {

    @Bean(destroyMethod="")
    public DataSource dataSource() throws Exception {
        Context ctx = new InitialContext();
        return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
    }
}

答案 8 :(得分:0)

在资源目录中为您需要运行应用程序的每个环境(例如dev,qa,stg等)创建特定的.yml文件。 image of .yml files in resources directory

如果您在pom.xml文件中使用spring-boot-maven-plugin 2.0.5.RELEASE,则可以按如下所示将配置文件添加到依赖项标记中。 image of pom.xml spring-boot-maven-plugin (您可以使用多个配置文件标签配置多个配置文件)

然后,您可以使用以下命令来构建和运行项目。

1) mvn clean install
2) mvn spring-boot:run -Dspring-boot.run.default==qa

然后,您将看到在运行项目时将默认配置文件设置为qa。 displaying the default profile when running the application

答案 9 :(得分:0)

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar

**来源-** https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html

基本上,当项目中存在多个application- {environment} .properties时,这是必需的。默认情况下,如果您在命令行上传递了-Drun.profiles或在

中为activeByDefault true
 <profile>
    <id>dev</id>
    <properties>
        <activatedProperties>dev</activatedProperties>
    </properties>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
</profile>

没有像上面定义的那样,默认情况下它将选择application.properties,否则您需要通过附加-Drun.profiles = {dev / stage / prod}进行选择。

TL; DR

mvn spring-boot:run -Drun.profiles=dev

答案 10 :(得分:0)

使用Intellij,因为我不知道如何将键盘快捷键设置为mvn spring-boot:run -Dspring.profiles.active=dev,所以我必须这样做:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <jvmArguments>
            -Dspring.profiles.active=dev
        </jvmArguments>
    </configuration>
</plugin>

答案 11 :(得分:0)

在Intellij IDEA中使用“ -Dspring-boot.run.profiles = foo,local”。工作正常它设置了2个配置文件“ foo和local”。

已通过启动版本“ 2.3.2.RELEASE”和Intellij IDEA CE 2019.3。进行了验证。

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

使用“ mvn spring-boot:run”设置配置文件 enter image description here

设置环境变量 enter image description here

答案 12 :(得分:0)

或者,可以通过添加以下行直接在application.properties文件中指定配置文件:

spring.profiles.active =产品

配置文件与Spring Boot属性文件结合使用。默认情况下,Spring Boot会解析一个名为application.properties的文件(位于src / main / resources目录中)以标识配置信息。

我们的第一个任务是在该文件中添加一个参数,该参数将告诉Spring使用与活动配置文件(即当前与该应用程序一起运行的配置文件)相对应的其他特定于环境的属性文件。我们可以通过将以下内容添加到application.properties文件中来做到这一点:

spring.profiles.active=@activatedProperties @

现在,我们需要创建两个新的特定于环境的属性文件(与现有application.properties文件位于同一路径),一个将由DEV概要文件使用,另一个将由PROD概要文件使用。这些文件需要命名为以下名称:

application-dev.properties

application-prod.properties

在每种情况下,我们都将prod指定为活动配置文件,这将导致出于配置目的选择application-prod.properties文件。