Spring没有从命令行覆盖活动配置文件

时间:2018-12-31 12:57:38

标签: java spring spring-boot spring-profiles

这是我的application.yml文件:

spring:
  freemarker:
    template-loader-path: classpath:/templates

  datasource:
    url: jdbc:postgresql://localhost:5432/myapp
    username: postgres
    password: password
    driver-class-name: org.postgresql.Driver

  jpa:
    show-sql: true
    properties:
      hibernate:
        enable_lazy_load_no_trans: false
        jdbc:
          lob:
            non_contextual_creation: true
        dialect: org.hibernate.dialect.PostgreSQLDialect
    hibernate:
      ddl-auto: create-drop


---

spring:
  profiles:
    active: development


---

spring:
  profiles: staging

  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update

logging:
  level:
    root: DEBUG

---

spring:
  profiles: production

  jpa:
    show-sql: false
    hibernate:
      ddl-auto: update

我使用以下命令运行该应用程序:

java -jar application.jar -Dspring.profiles.active=staging

在日志中,我可以看到spring boot打印出来: 以下配置文件处于活动状态:开发

那么,即使我在命令行args中显式地将活动配置文件设置为 staging ,为什么也没有?

3 个答案:

答案 0 :(得分:2)

顺序很重要。要设置系统属性,请使用

java -jar -Dspring.profiles.active=staging application.jar

您提到的那一行传递一个应用程序参数。

答案 1 :(得分:1)

您必须在jar文件之前指定选项,并在其之后指定参数

java [-options] -jar jarfile [args...]

-Dspring.profiles.active = staging是一个选项,而不是参数。所以请更改为以下

java -jar -Dspring.profiles.active=staging application.jar

答案 2 :(得分:1)

启动Java应用程序。通过命令

java [ options ] -jar file.jar [ arguments ]

春季概况 spring-docs

  

Spring Environment为此提供了一个API,但是您通常会设置一个System属性(spring.profiles.active)或一个OS环境变量(SPRING_PROFILES_ACTIVE)。另外,您可以使用-D参数启动应用程序(请记住将其放在主类或jar归档文件之前),如下所示:

$ java -jar -Dspring.profiles.active=production demo-0.0.1-SNAPSHOT.jar
  

在Spring Boot中,您还可以在application.properties中设置活动配置文件,如以下示例所示:

spring.profiles.active=production
  

您可以使用spring.profiles.active环境属性指定哪些配置文件处于活动状态,也可以使用以下开关在命令行上指定它:spring-docs

$ java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
  

用于多个配置文件

$ java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev,hsqldb