如何使用Spring Boot配置文件

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

  1. 我正在使用maven命令mvn spring-boot:run -Dspring.profiles.active=dev它不起作用,我无法使用mvn spring-boot:run选择dev配置文件。 我该如何选择?
  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来选择dev配置文件,控制台打印这么多日志并警告我从来没有请参阅使用java -jar XXX.jar ,并告诉我APPLICATION FAILED TO START

那么如何解决两个问题呢? 谢谢〜

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

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

 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.yml和一个application-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

你不需要三个.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:// username:  password:  

如果您使用的是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

您可以在一个application.properties(yml)中根据配置文件指定属性,就像这里一样。 然后mvn clean spring-boot:run -Dspring.profiles.active=dev应该正确运行它。 这个对我有用

@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"); } }