spring_reference/IV. Spring Boot features/23. Externalized Configurat...

1.7 KiB
Raw Blame History

23.外化配置

Spring Boot允许外化externalize你的配置这样你能够在不同的环境下使用相同的代码。你可以使用properties文件YAML文件环境变量和命令行参数来外化配置。使用@Value注解可以直接将属性值注入到你的beans中并通过Spring的Environment抽象或绑定到结构化对象来访问。

Spring Boot使用一个非常特别的PropertySource次序来允许对值进行合理的覆盖需要以下面的次序考虑属性

  1. 命令行参数
  2. 来自于java:comp/env的JNDI属性
  3. Java系统属性System.getProperties()
  4. 操作系统环境变量
  5. 只有在random.*里包含的属性会产生一个RandomValuePropertySource
  6. 在打包的jar外的应用程序配置文件application.properties包含YAML和profile变量
  7. 在打包的jar内的应用程序配置文件application.properties包含YAML和profile变量
  8. 在@Configuration类上的@PropertySource注解
  9. 默认属性使用SpringApplication.setDefaultProperties指定

下面是一个具体的示例假设你开发一个使用name属性的@Component

import org.springframework.stereotype.*
import org.springframework.beans.factory.annotation.*

@Component
public class MyBean {
    @Value("${name}")
    private String name;
    // ...
}

你可以将一个application.properties文件捆绑到jar内用来提供一个合理的默认name属性值。当运行在生产环境时可以在jar外提供一个application.properties文件来覆盖name属性。对于一次性的测试你可以使用特定的命令行开关启动比如java -jar app.jar --name="Spring")。