💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### spring环境变量Environment * systemProperties:存放System.getProperties\(\) * systemEnvironment:存放System.getenv\(\) ### 主要方法 * acceptsProfiles\(\):如果environment支持给定profile的话,就返回true; * getRequiredProperty\(\):获取必须定义的属性; ### Spring环境设置 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") ### 访问命令行属性 默认情况下,SpringApplication将任何可选的命令行参数(以'--'开头,比如,--server.port=9000)转化为property,并将其添加到Spring Environment中。如上所述,命令行属性总是优先于其他属性源。 如果你不想将命令行属性添加到Environment里,你可以使用SpringApplication.setAddCommandLineProperties(false)来禁止它们。 ### Application属性文件 SpringApplication将从以下位置加载application.properties文件,并把它们添加到Spring Environment中: 1. 当前目录下的一个/config子目录 2. 当前目录 3. 一个classpath下的/config包 4. classpath根路径(root) 这个列表是按优先级排序的(列表中位置高的将覆盖位置低的)。 > 注:你可以使用YAML('.yml')文件替代'.properties'。 如果不喜欢将application.properties作为配置文件名,你可以通过指定spring.config.name环境属性来切换其他的名称。你也可以使用spring.config.location环境属性来引用一个明确的路径(目录位置或文件路径列表以逗号分割)。 ``` $ java -jar myproject.jar --spring.config.name=myproject //or $ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties ``` 如果spring.config.location包含目录(相对于文件),那它们应该以/结尾(在加载前,spring.config.name产生的名称将被追加到后面)。不管spring.config.location是什么值,默认的搜索路径classpath:,classpath:/config,file:,file:config/总会被使用。以这种方式,你可以在application.properties中为应用设置默认值,然后在运行的时候使用不同的文件覆盖它,同时保留默认配置。 注:如果你使用环境变量而不是系统配置,大多数操作系统不允许以句号分割(period-separated)的key名称,但你可以使用下划线(underscores)代替(比如,使用SPRING\_CONFIG\_NAME代替spring.config.name)。如果你的应用运行在一个容器中,那么JNDI属性(java:comp/env)或servlet上下文初始化参数可以用来取代环境变量或系统属性,当然也可以使用环境变量或系统属性。