1. 程式人生 > 其它 >springboot中配置檔案的載入和讀取

springboot中配置檔案的載入和讀取

技術標籤:springspring bootProperties檔案的讀取

今天總結一下springboot中常用的配置檔案載入和使用,後續的章節裡會一一的把相關功能做總結,以便自己日後使用!廢話不多說了,先建立一個springboot專案,這個就不用多說了!

說到這個配置檔案的載入和讀取,有兩個重要的註解有必要了解一下,@ConfigurationProperties和@PropertySource,在 Spring Boot 專案中,為滿足以上要求,我們將大量的引數配置在 application.properties 或 application.yml 檔案中,通過@ConfigurationProperties註解,我們可以方便的獲取這些引數值。@PropertySource註解載入指定的配置檔案。

@ConfigurationProperties的基本用法非常簡單:我們為每個要捕獲的外部屬性提供一個帶有欄位的類。請注意以下幾點:1.字首定義了哪些外部屬性將繫結到類的欄位上2.根據 Spring Boot 寬鬆的繫結規則,類的屬性名稱必須與外部屬性的名稱匹配3.我們可以簡單地用一個值初始化一個欄位來定義一個預設值4.類本身可以是包私有的5.類的欄位必須有公共 setter 方法。

第一,source檔案的編寫

com.bw.auto.name=自動化
com.bw.auto.number=5

第二,pom檔案中引入相關jar的配置

 <!--匯入配置檔案處理器,在編寫配置檔案時就會提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

第三,Resource核心類的編寫

package com.bw.auto.resource;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@ConfigurationProperties(prefix="com.bw.auto")
@PropertySource(value = "classpath:resource.properties")
@Data
public class Resource {
    private String name;
    private String number;
}

第四,測試control的編寫

package com.bw.auto.modules.web;

import com.bw.auto.common.until.JsonUtils;
import com.bw.auto.resource.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HellowTest {
    @Autowired
    private Resource resource;
    
    @RequestMapping("/getResource")
    public String getResource(){
        return "======"+JsonUtils.objectToJsonStr(resource);
    }
}

其實到這裡就可以,我們啟動一下專案,看一下效果

至此一個簡單的獲取檔案方法就完成了,這個中間大家注意下,實體類中並沒有get和set方法,是不是很神奇啊?那是因為@Data註解的功能。好了不多說了,順便奉上json和實體類間轉換的工具類

package com.bw.auto.common.until;

import java.util.Collection;
import java.util.List;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

/***
 * 用jackson包實現json、物件、Map之間的轉換
 * @author Timcoding
 *
 */
public class JsonUtils {

    /**
     * 將 Array,list,set 解析成 Json 串
     * @return Json 串
     */
    public static String arrayToJsonStr(Object objs){
        JSONArray json = JSONArray.fromObject(objs);
        return json.toString();
    }

    /***
     * 將javabean物件和map物件 解析成 Json 串
     * @param obj
     * @return
     */
    public static String objectToJsonStr(Object obj){
        JSONObject json = JSONObject.fromObject(obj);
        return json.toString();

    }

    /***
     * 將javabean物件或者map物件 解析成 Json 串,使用JsonConfig 過濾屬性
     * @param obj
     * @param config
     * @return
     */
    public static String objectToJsonStr(Object obj, JsonConfig config ){
        JSONObject json = JSONObject.fromObject(obj,config);
        return json.toString();

    }

    /**
     * 將  Json 串 解析成 Array,list,set
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> Collection<T> jsonStrToArray(String jsonStr){
        JSONArray jsonArray = JSONArray.fromObject(jsonStr);
        Object array = JSONArray.toArray(jsonArray);
        return (Collection<T>) array;
    }

    /**
     * 將  Json 串 解析成 Array
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T[] jsonStrToArray(String jsonStr, Class<T> clazz){
        JSONArray jsonArray = JSONArray.fromObject(jsonStr);
        return (T[]) JSONArray.toArray(jsonArray,clazz);
    }
    /**
     * 將  Json 串 解析成 Collection
     * @return
     */
    public static <T> Collection<T> jsonStrToCollection(String jsonStr, Class<T> clazz){
        JSONArray jsonArray = JSONArray.fromObject(jsonStr);
        @SuppressWarnings("unchecked")
        Collection<T>  array = JSONArray.toCollection(jsonArray,clazz);
        return array;
    }

    /**
     * 將  Json 串 解析成 list
     * @return
     */
    public static <T> List<T> jsonStrToList(String jsonStr, Class<T> clazz){
        return (List<T>) jsonStrToCollection(jsonStr,clazz);
    }

    /**
     * 將  Json 串 解析成 Map或者javabean
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T jsonStrToObject(String jsonStr, Class<T> clazz){
        JSONObject json = JSONObject.fromObject(jsonStr);
        Object obj = JSONObject.toBean(json, clazz);
        return (T) obj;
    }

}