詳解SpringBoot讀取resource目錄下properties文件的常見(jiàn)方式
個(gè)人理解
在企業(yè)開(kāi)發(fā)中,我們經(jīng)常需要自定義一些全局變量/不可修改變量或者參數(shù)來(lái)解決大量的變量重復(fù)問(wèn)題,當(dāng)需要這個(gè)全局變量時(shí),只需要從配置文件中讀取即可,根據(jù)開(kāi)發(fā)中常見(jiàn)的情況,可以分為以下兩種情況,分別是:
- 配置文件為SpringBoot默認(rèn)的application.properties文件中的自定義參數(shù)
- 加載自定義properties文件中的自定義參數(shù),比如xxx.properties的自定義參數(shù)
加載SpringBoot默認(rèn)的application.properties
準(zhǔn)備工作
server.port=8081 # 自定義參數(shù)->都是person.變量名的形式 person.id=1 person.name=szh # list/set/數(shù)組->兩種寫法 person.hobby=play,read,write person.family[0]=father person.family[1]=mother # map->兩種寫法 person.map.key1=value1 person.map[key2]=value2 # Entity對(duì)象->Pet實(shí)體類 person.pet.type=dog person.pet.name=旺財(cái)
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Pet implements Serializable {
private String type;
private String name;
}
方式一 : @ConfigurationProperties
開(kāi)發(fā)中如果獲取整個(gè)以xxx開(kāi)頭的所有參數(shù),那么推薦使用第一種方式,如果獲取單個(gè)參數(shù),那么建議使用第二種獲取參數(shù)方式。
import com.szh.test.entity.Pet;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
@ConfigurationProperties(prefix = "person")
@Data
public class PersonConfig {
private int id;
private String name;
private List hobby;
private String[] family;
private Map map;
private Pet pet;
}
測(cè)試使用代碼:
@Autowired
private PersonConfig personConfig;
@RequestMapping("/hello1")
public void hello1() {
System.out.println(personConfig.getFamily());
System.out.println(personConfig.getHobby());
System.out.println(personConfig.getMap());
System.out.println(personConfig.getId());
System.out.println(personConfig.getName());
System.out.println(personConfig.getPet().getName());
}
方式二:@Value
@Value("${person.id}")
private int id;
@Value("${person.name}")
private String name;
@Value("${person.hobby}")
private List hobby;
@Value("${person.family}")
private String[] family;
@Value("${person.map}")
private Map map;
@Value("${person.pet}")
private Pet pet;
方式三:使用Environment獲取
@Autowired
private Environment env;
@RequestMapping("/hello1")
public void hello1() throws UnsupportedEncodingException {
String id = env.getProperty("person.id");
// 中文
String name = new String(env.getProperty("person.name").getBytes("ISO-8859-1"), "UTF-8");
List hobby = new ArrayList();
hobby.add(env.getProperty("person.hobby[0]"));
hobby.add(env.getProperty("person.hobby[1]"));
String[] family;
Map<String,String> map = new HashMap<String,String>();
map.put("key1", env.getProperty("person.map.key1"));
map.put("key2", env.getProperty("person.map.key2"));
Pet pet = new Pet(env.getProperty("person.pet.type"),env.getProperty("person.pet.name"));
}
加載自定義properties文件
準(zhǔn)備工作:在resource/目錄下新建一個(gè)自定義配置文件szh.properties
person.id=1 person.name=szh # list/set/數(shù)組->兩種寫法 person.hobby=play,read,write person.family[0]=father person.family[1]=mother # map->兩種寫法 person.map.key1=value1 person.map[key2]=value2 # Entity對(duì)象 person.pet.type=dog person.pet.name=旺財(cái)
方式一: @PropertySource+@ConfigurationProperties
@Component
@PropertySource(value = "classpath:szh.properties")
@ConfigurationProperties(prefix = "person")
@Data
public class PersonConfig {
private int id;
private String name;
private List hobby;
private String[] family;
private Map map;
private Pet pet;
}
方式二:@PropertySource+@Value
@Component
@PropertySource(value = "classpath:szh.properties")
@Data
public class PersonConfig {
@Value("${person.id}")
private int id;
@Value("${person.name}")
private String name;
@Value("${person.hobby}")
private List hobby;
@Value("${person.family}")
private String[] family;
@Value("${person.map}")
private Map map;
@Value("${person.pet}")
private Pet pet;
}
方式三:Properties加載
//讀取資源配置文件
InputStream is = Bean.class.getClassLoader().getResourceAsStream("szh.properties");
prop = new Properties();
String className = "person.name";//可以作為一個(gè)函數(shù)的變量
try {
prop.load(is);
String pathName = prop.getProperty(className);
} catch (Exception e) {
throw new RuntimeException("xxxx");
}
到此這篇關(guān)于SpringBoot讀取resource目錄下properties文件的常見(jiàn)方式的文章就介紹到這了,更多相關(guān)SpringBoot讀取properties文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring?Boot獲取resources目錄下的文件三種方式詳解
- springboot項(xiàng)目讀取resources目錄下的文件的9種方式
- Springboot 項(xiàng)目讀取Resources目錄下的文件(推薦)
- Spring Boot讀取resources目錄文件方法詳解
- SpringBoot中讀取jar包中的resources目錄下的文件的三種方式
- SpringBoot讀取Resource目錄下文件的四種方式總結(jié)
- SpringBoot實(shí)現(xiàn)本地上傳文件到resources目錄
- SpringBoot讀取resource目錄下文件失敗的原因及解決方案
- SpringBoot如何讀取resources目錄下的文件
- Spring?Boot項(xiàng)目獲取resources目錄下文件并返回給前端的方案
相關(guān)文章
Spring Boot啟動(dòng)及退出加載項(xiàng)的方法
這篇文章主要介紹了Spring Boot啟動(dòng)及退出加載項(xiàng)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
MybatisPlus字段自動(dòng)填充失效,填充值為null的解決方案
這篇文章主要介紹了MybatisPlus字段自動(dòng)填充失效,填充值為null的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Spring加載properties文件的兩種方式實(shí)例詳解
這篇文章主要介紹了Spring加載properties文件的兩種方式,需要的朋友可以參考下2018-02-02
解決SpringBoot項(xiàng)目在啟動(dòng)后自動(dòng)關(guān)閉的問(wèn)題
今天搭建了一個(gè)SpringBoot項(xiàng)目,但是在啟動(dòng)之后就自行關(guān)閉了,下面通過(guò)本文給大家介紹SpringBoot項(xiàng)目在啟動(dòng)后自動(dòng)關(guān)閉問(wèn)題及解決方法,需要的朋友可以參考下2023-08-08
java開(kāi)發(fā)中使用IDEA活動(dòng)模板快速增加注釋的方法
這篇文章主要介紹了java開(kāi)發(fā)中使用IDEA活動(dòng)模板快速增加注釋,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
一文搞懂Mybatis中Mapper配置文件獲取參數(shù)的五種方式
SpringCloud微服務(wù)續(xù)約實(shí)現(xiàn)源碼分析詳解

