SpringBoot讀取配置信息

配置文件:java

#服務端口號
server:
  port: 8081

app:
  proper:
    key: ${random.uuid}
    id: ${random.int}
    value: test123

  demo:
    val: autoInject

1.Environment 讀取app

使用方式:dom

@RestController
public class DemoController {
    @Autowired
    private Environment environment;

    @GetMapping(path = "show")
    public String show() {
        Map<String, String> result = new HashMap<>(4);
        result.put("env", environment.getProperty("server.port"));
        return JSON.toJSONString(result);
    }
}

2.@Value 註解方式
@Value註解能夠將配置信息注入到Bean的屬性,也是比較常見的使用方式,但有幾點須要額外注意ui

若是配置信息不存在會怎樣?
配置衝突了會怎樣(即多個配置文件中有同一個key時)?
使用方式以下,主要是經過 ${},大括號內爲配置的Key;
若是配置不存在時,給一個默認值時,能夠用冒號分割,後面爲具體的值code

@RestController
public class DemoController {
    // 配置必須存在,且獲取的是配置名爲 app.demo.val 的配置信息
    @Value("${app.demo.val}")
    private String autoInject;

    // 配置app.demo.not不存在時,不拋異常,給一個默認值data
    @Value("${app.demo.not:dada}")
    private String notExists;

    @GetMapping(path = "show")
    public String show() {
        Map<String, String> result = new HashMap<>(4);
        result.put("autoInject", autoInject);
        result.put("not", notExists);
        return JSON.toJSONString(result);
    }
}

3.對象映射方式server

即經過註解ConfigurationProperties來制定配置的前綴
經過Bean的屬性名,補上前綴,來完整定位配置信息的Key,並獲取Value賦值給這個Bean
上面這個過程,配置的注入,從有限的經驗來看,多半是反射來實現的,因此這個Bean屬性的Getter/Setter方法得加一下,上面藉助了Lombok來實現,標一個@Component表示這是個Bean,託付給Spring的ApplicationConttext來管理
以下:對象

@Data
@Component
@ConfigurationProperties(prefix = "app.proper")
public class ProperBean {
    private String key;
    private Integer id;
    private String value;
}

擴展:
properties配置優先級 > YAML配置優先級get

相關文章
相關標籤/搜索