### 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上下文初始化參數可以用來取代環境變量或系統屬性,當然也可以使用環境變量或系統屬性。
- 概述
- Spring的使命
- 環境變量
- spring架構
- Spring各版本特性
- Spring3.1新特性
- spring頂級項目
- spring基礎
- spring環境變量
- 依賴注入
- spring獲取bean方法
- BeanFactory vs FactoryBean
- JavaBean裝配
- XML顯式配置
- 基于JAVA配置
- 自動化裝配bean
- SpringBean的作用域
- Spring應用上下文實現
- springbean的生命周期
- 自定義Bean的創建與銷毀
- Spring容器啟動過程
- spring加載xsd文件的流程
- spring擴展接口
- Spring主要類功能說明
- spring事務管理
- 事務特性
- 數據庫事務隔離級別
- 事務隔離性問題
- spring事務隔離級別
- 事務傳播行為
- @Transactional
- 循環依賴
- 構造器注入
- 循環依賴原理
- spring循環依賴原理
- spring三級緩存
- Spring注解
- @Component
- @ComponentScan
- @Autowired
- @Import
- @ImportResource
- @Profile
- @Conditional
- @Qualifier
- @Scope
- @PropertySource
- @Value
- @EnableScheduling
- SpEL-Spring表達式
- Spring-AOP
- SpringAOP五種通知類型
- AOP術語
- SpringMVC
- MVC原理圖
- SpringMVC工作原理
- springboot
- @SpringCloudApplication
- springboot tomcat配置
- Spring Boot Starter POMs
- Spring Boot technical starters
- spring boot事件類型
- Springboot日志
- SpringCloud
- springcloud微服務解決方案
- 服務組件
- 注冊中心
- Eureka
- Spring Cloud Zookeeper
- nacos
- Hystrix熔斷原理
- Hystrix應用
- Spring Cloud Config
- 服務網關
- Zuul
- Spring Cloud Gateway
- 服務調用及負載
- Ribbon
- Feign&OpenFeign
- Turbine
- actuator
- springboot & springcloud
- springcloud vs dubbo
- 常見面試題
- BeanFactory和FactoryBean
- @Autowired/@Resource和@Inject的區別
- Singleton bean注入prototype bean
- 附錄