springboot(二)外部配置

springboot 配置信息

springboot中 屬性配置
  • yml/properties 文件配置: name:springboot
  • command-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
        }
    }
springboot properties 中定義隨機數
//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) 表示關閉命令行方式
配置文件加載:
properties or yml 加載前後順序
  • jar包同級目錄 /config 下;
  • jar包同級目錄;
  • classpath /config
  • classpath
指定 properties or yml 文件

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

properties or yml 默認加載 default文件

除加載 application.yml 文件之外,還會加載 application-default.yml 文件 優先使用 -default 配置信息,若是不存在纔會從 application.yml 中加載;
能夠使用 spring.profiles.active=dev 指定,則默認加載的指定文件變爲:application-dev.yml;springboot

直接賦值給 對象、Map、list
配置文件中賦值
//賦值到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;
    }
}
properties yml 輕鬆綁定

- 方式, spring.first-name 能夠使用 spring.firstname
大小寫 方式,配置文件中,不區分大小寫 推薦使用 - 方式less

properties yml 給List<Bean> 賦值
@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;
    }
}
相關文章
相關標籤/搜索