SpringBoot四种读取properties文件的方式(小结)
前言
在项目开发中经常会用到配置文件,配置文件的存在解决了很大一份重复的工作。今天就分享四种在Springboot中获取配置文件的方式。
注:前三种测试配置文件为springboot默认的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
packagecom.zyd.property.config; importjava.io.UnsupportedEncodingException; importjava.util.ArrayList; importjava.util.HashMap; importjava.util.List; importjava.util.Map; importorg.springframework.boot.context.properties.ConfigurationProperties; //importorg.springframework.context.annotation.PropertySource; importorg.springframework.stereotype.Component; /** *对应上方配置文件中的第一段配置 *@authoryadong.zhang *@date2017年6月1日下午4:34:18 *@versionV1.0 *@sinceJDK:1.7 */ @Component @ConfigurationProperties(prefix="com.zyd") //PropertySource默认取application.properties //@PropertySource(value="config.properties") publicclassPropertiesConfig{ publicStringtype3; publicStringtitle3; publicMap login=newHashMap (); publicList urls=newArrayList<>(); publicStringgetType3(){ returntype3; } publicvoidsetType3(Stringtype3){ this.type3=type3; } publicStringgetTitle3(){ try{ returnnewString(title3.getBytes("ISO-8859-1"),"UTF-8"); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } returntitle3; } publicvoidsetTitle3(Stringtitle3){ this.title3=title3; } publicMap getLogin(){ returnlogin; } publicvoidsetLogin(Map login){ this.login=login; } publicList getUrls(){ returnurls; } publicvoidsetUrls(List urls){ this.urls=urls; } }
程序启动类:Applaction.java
packagecom.zyd.property; importjava.io.UnsupportedEncodingException; importjava.util.HashMap; importjava.util.Map; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.boot.SpringApplication; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RestController; importcom.zyd.property.config.PropertiesConfig; /** *@authoryadong.zhang *@date2017年6月1日下午3:49:30 *@versionV1.0 *@sinceJDK:1.7 */ @SpringBootApplication @RestController publicclassApplaction{ @Autowired privatePropertiesConfigpropertiesConfig; /** * *第一种方式:使用`@ConfigurationProperties`注解将配置文件属性注入到配置对象类中 * *@authorzyd *@throwsUnsupportedEncodingException *@sinceJDK1.7 */ @RequestMapping("/config") publicMap configurationProperties(){ Map map=newHashMap (); map.put("type",propertiesConfig.getType3()); map.put("title",propertiesConfig.getTitle3()); map.put("login",propertiesConfig.getLogin()); map.put("urls",propertiesConfig.getUrls()); returnmap; } publicstaticvoidmain(String[]args)throwsException{ SpringApplicationapplication=newSpringApplication(Applaction.class); application.run(args); } }
访问结果:
{"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
importjava.io.UnsupportedEncodingException; importjava.util.HashMap; importjava.util.Map; importorg.springframework.beans.factory.annotation.Value; importorg.springframework.boot.SpringApplication; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RestController; /** *@authoryadong.zhang *@date2017年6月1日下午3:49:30 *@versionV1.0 *@sinceJDK:1.7 */ @SpringBootApplication @RestController publicclassApplaction{ @Value("${com.zyd.type}") privateStringtype; @Value("${com.zyd.title}") privateStringtitle; /** * *第二种方式:使用`@Value("${propertyName}")`注解 * *@authorzyd *@throwsUnsupportedEncodingException *@sinceJDK1.7 */ @RequestMapping("/value") publicMap value()throwsUnsupportedEncodingException{ Map map=newHashMap (); map.put("type",type); //*.properties文件中的中文默认以ISO-8859-1方式编码,因此需要对中文内容进行重新编码 map.put("title",newString(title.getBytes("ISO-8859-1"),"UTF-8")); returnmap; } publicstaticvoidmain(String[]args)throwsException{ SpringApplicationapplication=newSpringApplication(Applaction.class); application.run(args); } }
访问结果:
{"title":"使用@Value获取配置文件","type":"Springboot-@Value"}
三、使用Environment
程序启动类:Applaction.java
packagecom.zyd.property; importjava.io.UnsupportedEncodingException; importjava.util.HashMap; importjava.util.Map; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.boot.SpringApplication; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.core.env.Environment; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RestController; /** *@authoryadong.zhang *@date2017年6月1日下午3:49:30 *@versionV1.0 *@sinceJDK:1.7 */ @SpringBootApplication @RestController publicclassApplaction{ @Autowired privateEnvironmentenv; /** * *第三种方式:使用`Environment` * *@authorzyd *@throwsUnsupportedEncodingException *@sinceJDK1.7 */ @RequestMapping("/env") publicMap env()throwsUnsupportedEncodingException{ Map map=newHashMap (); map.put("type",env.getProperty("com.zyd.type2")); map.put("title",newString(env.getProperty("com.zyd.title2").getBytes("ISO-8859-1"),"UTF-8")); returnmap; } publicstaticvoidmain(String[]args)throwsException{ SpringApplicationapplication=newSpringApplication(Applaction.class); application.run(args); } }
访问结果:
{"title":"使用Environment获取配置文件","type":"Springboot-Environment"}
四、使用PropertiesLoaderUtils
app-config.properties
####通过注册监听器(`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用来初始化加载配置文件
packagecom.zyd.property.listener; importorg.springframework.boot.context.event.ApplicationStartedEvent; importorg.springframework.context.ApplicationListener; importcom.zyd.property.config.PropertiesListenerConfig; /** *配置文件监听器,用来加载自定义配置文件 * *@authoryadong.zhang *@date2017年6月1日下午3:38:25 *@versionV1.0 *@sinceJDK:1.7 */ publicclassPropertiesListenerimplementsApplicationListener { privateStringpropertyFileName; publicPropertiesListener(StringpropertyFileName){ this.propertyFileName=propertyFileName; } @Override publicvoidonApplicationEvent(ApplicationStartedEventevent){ PropertiesListenerConfig.loadAllProperties(propertyFileName); } }
PropertiesListenerConfig.java加载配置文件内容
packagecom.zyd.property.config; importjava.io.IOException; importjava.io.UnsupportedEncodingException; importjava.util.HashMap; importjava.util.Map; importjava.util.Properties; importorg.springframework.beans.BeansException; importorg.springframework.core.io.support.PropertiesLoaderUtils; /** *第四种方式:PropertiesLoaderUtils * *@authoryadong.zhang *@date2017年6月1日下午3:32:37 *@versionV1.0 *@sinceJDK:1.7 */ publicclassPropertiesListenerConfig{ publicstaticMap propertiesMap=newHashMap<>(); privatestaticvoidprocessProperties(Propertiesprops)throwsBeansException{ propertiesMap=newHashMap (); for(Objectkey:props.keySet()){ StringkeyStr=key.toString(); try{ //PropertiesLoaderUtils的默认编码是ISO-8859-1,在这里转码一下 propertiesMap.put(keyStr,newString(props.getProperty(keyStr).getBytes("ISO-8859-1"),"utf-8")); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); }catch(java.lang.Exceptione){ e.printStackTrace(); } } } publicstaticvoidloadAllProperties(StringpropertyFileName){ try{ Propertiesproperties=PropertiesLoaderUtils.loadAllProperties(propertyFileName); processProperties(properties); }catch(IOExceptione){ e.printStackTrace(); } } publicstaticStringgetProperty(Stringname){ returnpropertiesMap.get(name).toString(); } publicstaticMap getAllProperty(){ returnpropertiesMap; } }
Applaction.java启动类
packagecom.zyd.property; importjava.io.UnsupportedEncodingException; importjava.util.HashMap; importjava.util.Map; importorg.springframework.boot.SpringApplication; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RestController; importcom.zyd.property.config.PropertiesListenerConfig; importcom.zyd.property.listener.PropertiesListener; /** *@authoryadong.zhang *@date2017年6月1日下午3:49:30 *@versionV1.0 *@sinceJDK:1.7 */ @SpringBootApplication @RestController publicclassApplaction{ /** * *第四种方式:通过注册监听器(`Listeners`)+`PropertiesLoaderUtils`的方式 * *@authorzyd *@throwsUnsupportedEncodingException *@sinceJDK1.7 */ @RequestMapping("/listener") publicMap listener(){ Map map=newHashMap (); map.putAll(PropertiesListenerConfig.getAllProperty()); returnmap; } publicstaticvoidmain(String[]args)throwsException{ SpringApplicationapplication=newSpringApplication(Applaction.class); //第四种方式:注册监听器 application.addListeners(newPropertiesListener("app-config.properties")); application.run(args); } }
访问结果:
{"com.zyd.name":"zyd","com.zyd.address":"Beijing","com.zyd.title":"使用Listeners+PropertiesLoaderUtils获取配置文件","com.zyd.type":"Springboot-Listeners","com.zyd.company":"in"}
到此这篇关于SpringBoot四种读取properties文件的方式(小结)的文章就介绍到这了,更多相关SpringBoot读取properties文件内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!