yml/properties
文件配置: name:springbootcommand-line
java -jar xxx.jar --name="springboot"@component public class PropertiesConfiguration{ @Value("${name}") private String name; @PostConstruct public void init(){ System.out.println(name); // springboot } }
//yml or properties 方式 my.secret: ${random.value} my.number: ${random.int} my.bignumber: ${random.long} my.uuid: ${random.uuid} my.number.less.then.ten: ${random.int(10)} //獲取10之內的數據 my.number.in.range: ${random.int[1024,1040]} //獲取範圍數據 //命令行 方式 java -jar xx.jar --my.secret='${random.uuid}'
注
命令行方式中參數java
--
表示經過命令行方式設置 環境屬性;SpringApplication.setAddCommandLineProperties(false)
表示關閉命令行方式springboot默認加載的是 application.properties or application.yml 文件; command-line 修改默認加載配置文件
--spring.config.name=myApplication
command-line 指定多個配置文件--spring.config.name='classpath:/myapplication.properties,classpath:/showapplication.properties'
command-line 指定文件加載目錄:--spring.config.location='classpath:/,file:./'
加載順序是從後往前加載;spring
除加載
application.yml
文件之外,還會加載application-default.yml
文件 優先使用-default
配置信息,若是不存在纔會從application.yml
中加載;
能夠使用spring.profiles.active=dev
指定,則默認加載的指定文件變爲:application-dev.yml
;springboot
//賦值到Map中 同理賦值到 Bean中 @ConfigurationProperties(profix='my') public class ConfigurationBean{ private Map<String, String> prod; private List<String> servers; public void setProd(HashMap<String, String> prod) { this.prod = prod; } public void setServers(List<String> servers){ this.servers = servers; } } //配置文件賦值方式 my: dev: url: http://dev.example.com name: Developer setup prod: url: http://prod.example.com name: My CollMap servers: - http://www.baidu.com - http://www.google.com //打印結果: prod: {name=My CollMap, url=http://prod.example.com} servers: [http://www.baidu.com, http://www.google.com] //command-line 賦值方式 java -jar xxx.jar --my.prod.url='http://core.com' --my.prod.name='core name' //打印結果 prod: {name=core name, url=http://core.com} java -jar xxx.jar --my.servers='[http://core.com,http://www.my.com]' servers: [http://core.com, http://www.my.com]
在 yml 單個文件中配置多個環境信息 使用
---
進行分割;
spring.profiles.active= development
表示激活那個配置spring.profiles
表示當前的 配置分類
當前內容必須的再同一個yml文件當中
例如demo:當前啓動的端口爲 8081app
spring: profiles: active: development server: port: 8080 --- spring: profiles: development server: port: 8081 --- spring: profiles: production server: port: 8082
@Configuration public class EnablePropertiesConfiguration { @ConfigurationProperties(prefix = "environments") @Bean public PropertiesConfigurationOther propertiesConfigurationOther(){ return new PropertiesConfigurationOther(); } } public class PropertiesConfigurationOther { @Value("${name}") private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
-
方式, spring.first-name 能夠使用 spring.firstname
大小寫
方式,配置文件中,不區分大小寫 推薦使用-
方式less
@Getter @Setter public class MyBean { private String name; private String desc; } application.yml environments: myBeans: - name: zhsnagsan desc: shangsan-desc - name: lisi desc: lisi-desc @Component @ConfigurationProperties(prefix = "environments") public class PropertiesConfiguration { private List<MyBean> myBeans; public void setMyBean(List<MyBean> myBeans){ this.myBeans = myBeans; } }
//類上添加 @Validated註解 // 對應的字段上添加 @NotNull //當前若是沒有在 yml中配置 myBeans 中的內容 ,致使myBeans爲null 則會報錯 ...... @Component @ConfigurationProperties(prefix = "environments") @Validated public class PropertiesConfiguration { @NotNull private List<MyBean> myBeans; public void setMyBean(List<MyBean> myBeans){ this.myBeans = myBeans; } }