SpringBoot四種讀取properties文件的方式(小結(jié))
前言
在項目開發(fā)中經(jīng)常會用到配置文件,配置文件的存在解決了很大一份重復(fù)的工作。今天就分享四種在Springboot中獲取配置文件的方式。
注:前三種測試配置文件為springboot默認(rèn)的application.properties文件
#######################方式一######################### com.zyd.type3=Springboot - @ConfigurationProperties com.zyd.title3=使用@ConfigurationProperties獲取配置文件 #map com.zyd.login[username]=zhangdeshuai com.zyd.login[password]=zhenshuai com.zyd.login[callback]=http://www.flyat.cc #list com.zyd.urls[0]=http://ztool.cc com.zyd.urls[1]=http://ztool.cc/format/js com.zyd.urls[2]=http://ztool.cc/str2image com.zyd.urls[3]=http://ztool.cc/json2Entity com.zyd.urls[4]=http://ztool.cc/ua #######################方式二######################### com.zyd.type=Springboot - @Value com.zyd.title=使用@Value獲取配置文件 #######################方式三######################### com.zyd.type2=Springboot - Environment com.zyd.title2=使用Environment獲取配置文件
一、@ConfigurationProperties方式
自定義配置類:PropertiesConfig.java
package com.zyd.property.config; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties; //import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; /** * 對應(yīng)上方配置文件中的第一段配置 * @author <a href="mailto:yadong.zhang0415@gmail.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >yadong.zhang</a> * @date 2017年6月1日 下午4:34:18 * @version V1.0 * @since JDK : 1.7 */ @Component @ConfigurationProperties(prefix = "com.zyd") // PropertySource默認(rèn)取application.properties // @PropertySource(value = "config.properties") public class PropertiesConfig { public String type3; public String title3; public Map<String, String> login = new HashMap<String, String>(); public List<String> urls = new ArrayList<>(); public String getType3() { return type3; } public void setType3(String type3) { this.type3 = type3; } public String getTitle3() { try { return new String(title3.getBytes("ISO-8859-1"), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return title3; } public void setTitle3(String title3) { this.title3 = title3; } public Map<String, String> getLogin() { return login; } public void setLogin(Map<String, String> login) { this.login = login; } public List<String> getUrls() { return urls; } public void setUrls(List<String> urls) { this.urls = urls; } }
程序啟動類:Applaction.java
package com.zyd.property; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.zyd.property.config.PropertiesConfig; /** * @author <a href="mailto:yadong.zhang0415@gmail.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >yadong.zhang</a> * @date 2017年6月1日 下午3:49:30 * @version V1.0 * @since JDK : 1.7 */ @SpringBootApplication @RestController public class Applaction { @Autowired private PropertiesConfig propertiesConfig; /** * * 第一種方式:使用`@ConfigurationProperties`注解將配置文件屬性注入到配置對象類中 * * @author zyd * @throws UnsupportedEncodingException * @since JDK 1.7 */ @RequestMapping("/config") public Map<String, Object> configurationProperties() { Map<String, Object> map = new HashMap<String, Object>(); map.put("type", propertiesConfig.getType3()); map.put("title", propertiesConfig.getTitle3()); map.put("login", propertiesConfig.getLogin()); map.put("urls", propertiesConfig.getUrls()); return map; } public static void main(String[] args) throws Exception { SpringApplication application = new SpringApplication(Applaction.class); application.run(args); } }
訪問結(jié)果:
{"title":"使用@ConfigurationProperties獲取配置文件","urls":["http://ztool.cc","http://ztool.cc/format/js","http://ztool.cc/str2image","http://ztool.cc/json2Entity","http://ztool.cc/ua"],"login":{"username":"zhangdeshuai","callback":"http://www.flyat.cc","password":"zhenshuai"},"type":"Springboot - @ConfigurationProperties"}
二、使用@Value注解方式
程序啟動類:Applaction.java
import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author <a href="mailto:yadong.zhang0415@gmail.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >yadong.zhang</a> * @date 2017年6月1日 下午3:49:30 * @version V1.0 * @since JDK : 1.7 */ @SpringBootApplication @RestController public class Applaction { @Value("${com.zyd.type}") private String type; @Value("${com.zyd.title}") private String title; /** * * 第二種方式:使用`@Value("${propertyName}")`注解 * * @author zyd * @throws UnsupportedEncodingException * @since JDK 1.7 */ @RequestMapping("/value") public Map<String, Object> value() throws UnsupportedEncodingException { Map<String, Object> map = new HashMap<String, Object>(); map.put("type", type); // *.properties文件中的中文默認(rèn)以ISO-8859-1方式編碼,因此需要對中文內(nèi)容進(jìn)行重新編碼 map.put("title", new String(title.getBytes("ISO-8859-1"), "UTF-8")); return map; } public static void main(String[] args) throws Exception { SpringApplication application = new SpringApplication(Applaction.class); application.run(args); } }
訪問結(jié)果:
{"title":"使用@Value獲取配置文件","type":"Springboot - @Value"}
三、使用Environment
程序啟動類:Applaction.java
package com.zyd.property; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author <a href="mailto:yadong.zhang0415@gmail.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >yadong.zhang</a> * @date 2017年6月1日 下午3:49:30 * @version V1.0 * @since JDK : 1.7 */ @SpringBootApplication @RestController public class Applaction { @Autowired private Environment env; /** * * 第三種方式:使用`Environment` * * @author zyd * @throws UnsupportedEncodingException * @since JDK 1.7 */ @RequestMapping("/env") public Map<String, Object> env() throws UnsupportedEncodingException { Map<String, Object> map = new HashMap<String, Object>(); map.put("type", env.getProperty("com.zyd.type2")); map.put("title", new String(env.getProperty("com.zyd.title2").getBytes("ISO-8859-1"), "UTF-8")); return map; } public static void main(String[] args) throws Exception { SpringApplication application = new SpringApplication(Applaction.class); application.run(args); } }
訪問結(jié)果:
{"title":"使用Environment獲取配置文件","type":"Springboot - Environment"}
四、使用PropertiesLoaderUtils
app-config.properties
#### 通過注冊監(jiān)聽器(`Listeners`) + `PropertiesLoaderUtils`的方式 com.zyd.type=Springboot - Listeners com.zyd.title=使用Listeners + PropertiesLoaderUtils獲取配置文件 com.zyd.name=zyd com.zyd.address=Beijing com.zyd.company=in
PropertiesListener.java 用來初始化加載配置文件
package com.zyd.property.listener; import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.ApplicationListener; import com.zyd.property.config.PropertiesListenerConfig; /** * 配置文件監(jiān)聽器,用來加載自定義配置文件 * * @author <a href="mailto:yadong.zhang0415@gmail.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >yadong.zhang</a> * @date 2017年6月1日 下午3:38:25 * @version V1.0 * @since JDK : 1.7 */ public class PropertiesListener implements ApplicationListener<ApplicationStartedEvent> { private String propertyFileName; public PropertiesListener(String propertyFileName) { this.propertyFileName = propertyFileName; } @Override public void onApplicationEvent(ApplicationStartedEvent event) { PropertiesListenerConfig.loadAllProperties(propertyFileName); } }
PropertiesListenerConfig.java 加載配置文件內(nèi)容
package com.zyd.property.config; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.springframework.beans.BeansException; import org.springframework.core.io.support.PropertiesLoaderUtils; /** * 第四種方式:PropertiesLoaderUtils * * @author <a href="mailto:yadong.zhang0415@gmail.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >yadong.zhang</a> * @date 2017年6月1日 下午3:32:37 * @version V1.0 * @since JDK : 1.7 */ public class PropertiesListenerConfig { public static Map<String, String> propertiesMap = new HashMap<>(); private static void processProperties(Properties props) throws BeansException { propertiesMap = new HashMap<String, String>(); for (Object key : props.keySet()) { String keyStr = key.toString(); try { // PropertiesLoaderUtils的默認(rèn)編碼是ISO-8859-1,在這里轉(zhuǎn)碼一下 propertiesMap.put(keyStr, new String(props.getProperty(keyStr).getBytes("ISO-8859-1"), "utf-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (java.lang.Exception e) { e.printStackTrace(); } } } public static void loadAllProperties(String propertyFileName) { try { Properties properties = PropertiesLoaderUtils.loadAllProperties(propertyFileName); processProperties(properties); } catch (IOException e) { e.printStackTrace(); } } public static String getProperty(String name) { return propertiesMap.get(name).toString(); } public static Map<String, String> getAllProperty() { return propertiesMap; } }
Applaction.java 啟動類
package com.zyd.property; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.zyd.property.config.PropertiesListenerConfig; import com.zyd.property.listener.PropertiesListener; /** * @author <a href="mailto:yadong.zhang0415@gmail.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >yadong.zhang</a> * @date 2017年6月1日 下午3:49:30 * @version V1.0 * @since JDK : 1.7 */ @SpringBootApplication @RestController public class Applaction { /** * * 第四種方式:通過注冊監(jiān)聽器(`Listeners`) + `PropertiesLoaderUtils`的方式 * * @author zyd * @throws UnsupportedEncodingException * @since JDK 1.7 */ @RequestMapping("/listener") public Map<String, Object> listener() { Map<String, Object> map = new HashMap<String, Object>(); map.putAll(PropertiesListenerConfig.getAllProperty()); return map; } public static void main(String[] args) throws Exception { SpringApplication application = new SpringApplication(Applaction.class); // 第四種方式:注冊監(jiān)聽器 application.addListeners(new PropertiesListener("app-config.properties")); application.run(args); } }
訪問結(jié)果:
{"com.zyd.name":"zyd","com.zyd.address":"Beijing","com.zyd.title":"使用Listeners + PropertiesLoaderUtils獲取配置文件","com.zyd.type":"Springboot - Listeners","com.zyd.company":"in"}
到此這篇關(guān)于SpringBoot四種讀取properties文件的方式(小結(jié))的文章就介紹到這了,更多相關(guān)SpringBoot讀取properties文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用jakarta.json進(jìn)行json序列化和反序列化
java里,json框架何其多,常見的有jackson、fastjson、gson等,本文重點介紹如何使用jakarta.json進(jìn)行json序列化和反序列化,需要的朋友可以參考下,2024-07-07springboot+redis分布式鎖實現(xiàn)模擬搶單
這篇文章主要介紹了springboot+redis分布式鎖實現(xiàn)模擬搶單,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03idea配置檢查XML中SQL語法及書寫sql語句智能提示的方法
idea連接了數(shù)據(jù)庫,也可以執(zhí)行SQL查到數(shù)據(jù),但是無法識別sql語句中的表導(dǎo)致沒有提示,下面這篇文章主要給大家介紹了關(guān)于idea配置檢查XML中SQL語法及書寫sql語句智能提示的相關(guān)資料,需要的朋友可以參考下2023-03-03Ribbon負(fù)載均衡服務(wù)調(diào)用的示例詳解
Rbbo其實就是一個軟負(fù)載均衡的客戶端組件,他可以和其他所需請求的客戶端結(jié)合使用,這篇文章主要介紹了Ribbon負(fù)載均衡服務(wù)調(diào)用案例代碼,需要的朋友可以參考下2023-01-01Spring Security+Spring Data Jpa如何進(jìn)行安全管理
這篇文章主要介紹了Spring Security+Spring Data Jpa如何進(jìn)行安全管理,幫助大家更好的理解和學(xué)習(xí)Spring Security框架,感興趣的朋友可以了解下2020-09-09