SpringBoot:四种读取 properties 文件的方式
- 2022-11-30  陕西
 本文字数:4877 字
阅读完需:约 16 分钟

前言
在项目开发中经常会用到配置文件,配置文件的存在解决了很大一份重复的工作。今天就分享四种在 Springboot 中获取配置文件的方式。
注:前三种测试配置文件为 springboot 默认的application.properties文件
#######################方式一#########################com.battle.type3=Springboot - @ConfigurationPropertiescom.battle.title3=使用@ConfigurationProperties获取配置文件#mapcom.battle.login[username]=admincom.battle.login[password]=123456com.battle.login[callback]=http://www.flyat.cc#listcom.battle.urls[0]=http://ztool.cccom.battle.urls[1]=http://ztool.cc/format/jscom.battle.urls[2]=http://ztool.cc/str2imagecom.battle.urls[3]=http://ztool.cc/json2Entitycom.battle.urls[4]=http://ztool.cc/ua #######################方式二#########################com.battle.type=Springboot - @Valuecom.battle.title=使用@Value获取配置文件 #######################方式三#########################com.battle.type2=Springboot - Environmentcom.battle.title2=使用Environment获取配置文件一、@ConfigurationProperties 方式
自定义配置类:PropertiesConfig.java
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; /** * 对应上方配置文件中的第一段配置 * @author battle* @date 2017年6月1日 下午4:34:18* @version V1.0 * @since JDK : 1.7 */ @Component @ConfigurationProperties(prefix = "com.zyd") // PropertySource默认取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
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;@SpringBootApplication @RestController public class Applaction {	@Autowired private PropertiesConfig propertiesConfig;	/** 	* 第一种方式:使用`@ConfigurationProperties`注解将配置文件属性注入到配置对象类中 	* @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 );	}}访问结果:
{"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":"admin",
"callback":"http://www.flyat.cc","password":"123456"},
"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;@SpringBootApplication @RestController public class Applaction {	@Value("${com.zyd.type}") private String type;	@Value("${com.zyd.title}") private String title;	/** * * 第二种方式:使用`@Value("${propertyName}")`注解 * 	 * @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文件中的中文默认以ISO-8859-1方式编码,因此需要对中文内容进行重新编码 		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); 		} }访问结果:
{"title":"使用 @Value 获取配置文件","type":"Springboot - @Value"}
三、使用 Environment 程序启动类:Applaction.java
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; @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);	}}访问结果:{"title":"使用 Environment 获取配置文件","type":"Springboot - Environment"}四、使用 PropertiesLoaderUtilsapp-config.properties
#### 通过注册监听器(`Listeners`) + `PropertiesLoaderUtils`的方式 com.battle.type=Springboot - Listeners com.battle.title=使用Listeners + PropertiesLoaderUtils获取配置文件 com.battle.name=zyd com.battle.address=Beijing com.battle.company=inPropertiesListener.java 用来初始化加载配置文件
import org.springframework.boot.context.event.ApplicationStartedEvent;import org.springframework.context.ApplicationListener;import com.zyd.property.config.PropertiesListenerConfig;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 加载配置文件内容
import org.springframework.boot.context.event.ApplicationStartedEvent;import org.springframework.context.ApplicationListener;import com.zyd.property.config.PropertiesListenerConfig;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);	}}Applaction.java 启动类
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; @SpringBootApplication @RestController public class Applaction {	/** * * 第四种方式:通过注册监听器(`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);		// 第四种方式:注册监听器 application.addListeners(new PropertiesListener("app-config.properties")); application.run(args); } }访问结果:
{"com.battle.name":"zyd",
"com.battle.address":"Beijing",
"com.battle.title":"使用 Listeners + PropertiesLoaderUtils 获取配置文件",
"com.battle.type":"Springboot - Listeners",
"com.battle.company":"in"}
版权声明: 本文为 InfoQ 作者【@下一站】的原创文章。
原文链接:【http://xie.infoq.cn/article/c20af9e6a564360c2a6cf267e】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
@下一站
懒人 2020-11-22 加入
都是黄泉预约客,何必难为每一天,执念太强,无法豁然。









    
评论