springboot加載配置文件幾種方式


一,springboot優勢之一就是自動化配置

  開發過程中springboot自動讀取application.properties和application.yaml,我們可以利用這一點實現配置讀取

二,say nothing without codes

  1,@Value(),最常用的方式

  application.yaml

config: zhang

  使用:  

    @Value("${config}")
    private String config;

    
    @PostMapping("/index")
    public void say() {
        System.out.println(config);
        
    }

  輸出:

 

   2,配置成實體

  以上用法有個缺點,當某個配置有過多屬性,比如郵件,有名稱,密碼,地址等屬性,Value過多,代碼過於丑陋,那么實體就是個很好的解決方式

  

config2:
  name: demo1
  value: demoValue1
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "config2")
public class BeanConfig {
    public String name;
    public String value;

}
@RestController
public class Controller {

    @Autowired
    public BeanConfig config2;

    @PostMapping("/index")
    public void say() {
        
        System.out.println(config2);
        
    }
}

  輸出:BeanConfig(name=demo1, value=demoValue1)

  3,進階版,配置成Map

  

config3:
  -id1:
    name: demo1
    value: demoValue1
  -id2:
    name: demo2
    value: demoValue2
@Data
@Component
@ConfigurationProperties(prefix = "config3")
public class Config3 {

    private Map<String, String> id1 = new HashMap<>();
    private Map<String, String> id2 = new HashMap<>();

    public Map<String, String> getId1() {
        return id1;
    }

    public void setId1(Map<String, String> id1) {
        this.id1 = id1;
    }

    public Map<String, String> getId2() {
        return id2;
    }

    public void setId2(Map<String, String> id2) {
        this.id2 = id2;
    }
}
@RestController
public class Controller {

    @Autowired
    public Config3 config3;

    @PostMapping("/index")
    public void say() {
       
        System.out.println(config3);
    }
}

  輸出:Config3(id1={name=demo1, value=demoValue1}, id2={name=demo2, value=demoValue2})

 

三,總結

  以上配置基本滿足日常需求

如果第三種也是可以配置成動態的方式,配置List里新增配置項可以自動識別。  

config4:
  maillist:
    - enable: true
      name: demo1
      value: demoValue1
    - enable: true
      name: demo2
      value: demoValue2
    - enable: true
      name: demo3
      value: demoValue3
@Data
@Component
@ConfigurationProperties(prefix = "config4")
public class Config4 {
    private List<MailBean> mailList;
}


@Data
public class MailBean {
    public String name;
    public String value;
}
@RestController
public class Controller {

    @Autowired
    public Config4 config4;

    @PostMapping("/index")
    public void say() {
        System.out.println(config4);
    }
}

輸出:Config4(mailList=[MailBean(name=demo1, value=demoValue1), MailBean(name=demo2, value=demoValue2), MailBean(name=demo3, value=demoValue3)])


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM