SpringBoot:四种读取properties文件的方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq496013218/article/details/75146757
前言

在项目开发中经常会用到配置文件,配置文件的存在解决了很大一份重复的工作。今天就分享四种在Springboot中获取配置文件的方式。


注:前三种测试配置文件为springboot默认的application.properties文件

#######################方式一#########################
com.battle.type3=Springboot - @ConfigurationProperties
com.battle.title3=使用@ConfigurationProperties获取配置文件
#map
com.battle.login[username]=admin
com.battle.login[password]=123456
com.battle.login[callback]=http://www.flyat.cc
#list
com.battle.urls[0]=http://ztool.cc
com.battle.urls[1]=http://ztool.cc/format/js
com.battle.urls[2]=http://ztool.cc/str2image
com.battle.urls[3]=http://ztool.cc/json2Entity
com.battle.urls[4]=http://ztool.cc/ua

#######################方式二#########################
com.battle.type=Springboot - @Value
com.battle.title=使用@Value获取配置文件

#######################方式三#########################
com.battle.type2=Springboot - Environment
com.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"}
四、使用PropertiesLoaderUtils
app-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=in
PropertiesListener.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"}


阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页