SpringBoot四種讀取properties文件的方式(小結(jié))
前言
在項(xiàng)目開(kāi)發(fā)中經(jīng)常會(huì)用到配置文件,配置文件的存在解決了很大一份重復(fù)的工作。今天就分享四種在Springboot中獲取配置文件的方式。
注:前三種測(cè)試配置文件為springboot默認(rèn)的application.properties文件
#######################方式一#########################com.zyd.type3=Springboot - @ConfigurationPropertiescom.zyd.title3=使用@ConfigurationProperties獲取配置文件#mapcom.zyd.login[username]=zhangdeshuaicom.zyd.login[password]=zhenshuaicom.zyd.login[callback]=http://www.flyat.cc#listcom.zyd.urls[0]=http://ztool.cccom.zyd.urls[1]=http://ztool.cc/format/jscom.zyd.urls[2]=http://ztool.cc/str2imagecom.zyd.urls[3]=http://ztool.cc/json2Entitycom.zyd.urls[4]=http://ztool.cc/ua#######################方式二#########################com.zyd.type=Springboot - @Valuecom.zyd.title=使用@Value獲取配置文件#######################方式三#########################com.zyd.type2=Springboot - Environmentcom.zyd.title2=使用Environment獲取配置文件
一、@ConfigurationProperties方式
自定義配置類(lèi):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;/** * 對(duì)應(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; }}
程序啟動(dòng)類(lèi):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@RestControllerpublic class Applaction { @Autowired private PropertiesConfig propertiesConfig; /** * * 第一種方式:使用`@ConfigurationProperties`注解將配置文件屬性注入到配置對(duì)象類(lèi)中 * * @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); }}
訪問(wèn)結(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注解方式
程序啟動(dòng)類(lèi):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@RestControllerpublic 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方式編碼,因此需要對(duì)中文內(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); }}
訪問(wèn)結(jié)果:
{'title':'使用@Value獲取配置文件','type':'Springboot - @Value'}
三、使用Environment
程序啟動(dòng)類(lèi):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@RestControllerpublic 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); }}
訪問(wèn)結(jié)果:
{'title':'使用Environment獲取配置文件','type':'Springboot - Environment'}
四、使用PropertiesLoaderUtils
app-config.properties
#### 通過(guò)注冊(cè)監(jiān)聽(tīng)器(`Listeners`) + `PropertiesLoaderUtils`的方式com.zyd.type=Springboot - Listenerscom.zyd.title=使用Listeners + PropertiesLoaderUtils獲取配置文件com.zyd.name=zydcom.zyd.address=Beijingcom.zyd.company=in
PropertiesListener.java 用來(lái)初始化加載配置文件
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)聽(tīng)器,用來(lái)加載自定義配置文件 * * @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 啟動(dòng)類(lèi)
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@RestControllerpublic class Applaction { /** * * 第四種方式:通過(guò)注冊(cè)監(jiān)聽(tīng)器(`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); // 第四種方式:注冊(cè)監(jiān)聽(tīng)器 application.addListeners(new PropertiesListener('app-config.properties')); application.run(args); }}
訪問(wèn)結(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)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. 完美解決vue 中多個(gè)echarts圖表自適應(yīng)的問(wèn)題2. PHP實(shí)現(xiàn)簡(jiǎn)單線性回歸之?dāng)?shù)學(xué)庫(kù)的重要性3. 利用CSS制作3D動(dòng)畫(huà)4. Java GZip 基于內(nèi)存實(shí)現(xiàn)壓縮和解壓的方法5. jsp+servlet簡(jiǎn)單實(shí)現(xiàn)上傳文件功能(保存目錄改進(jìn))6. JAMon(Java Application Monitor)備忘記7. SpringBoot+TestNG單元測(cè)試的實(shí)現(xiàn)8. Springboot 全局日期格式化處理的實(shí)現(xiàn)9. 存儲(chǔ)于xml中需要的HTML轉(zhuǎn)義代碼10. idea配置jdk的操作方法
