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

前言

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

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

[html] view plain copy

  1. #######################方式一#########################
  2. com.battle.type3=Springboot - @ConfigurationProperties
  3. com.battle.title3=使用@ConfigurationProperties获取配置文件
  4. #map
  5. com.battle.login[username]=admin
  6. com.battle.login[password]=123456
  7. com.battle.login[callback]=http://www.flyat.cc
  8. #list
  9. com.battle.urls[0]=http://ztool.cc
  10. com.battle.urls[1]=http://ztool.cc/format/js
  11. com.battle.urls[2]=http://ztool.cc/str2image
  12. com.battle.urls[3]=http://ztool.cc/json2Entity
  13. com.battle.urls[4]=http://ztool.cc/ua
  14. #######################方式二#########################
  15. com.battle.type=Springboot - @Value
  16. com.battle.title=使用@Value获取配置文件
  17. #######################方式三#########################
  18. com.battle.type2=Springboot - Environment
  19. com.battle.title2=使用Environment获取配置文件

一、@ConfigurationProperties方式

自定义配置类:PropertiesConfig.java

[java] view plain copy

  1. import java.io.UnsupportedEncodingException;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import org.springframework.boot.context.properties.ConfigurationProperties;
  7. //import org.springframework.context.annotation.PropertySource;
  8. import org.springframework.stereotype.Component;
  9. /**
  10. * 对应上方配置文件中的第一段配置
  11. * @author battle
  12. * @date 2017年6月1日 下午4:34:18
  13. * @version V1.0
  14. * @since JDK : 1.7 */
  15. @Component
  16. @ConfigurationProperties(prefix = "com.zyd")
  17. // PropertySource默认取application.properties
  18. // @PropertySource(value = "config.properties")
  19. public class PropertiesConfig {
  20. public String type3; public String title3;
  21. public Map<String, String> login = new HashMap<String, String>();
  22. public List<String> urls = new ArrayList<>();
  23. public String getType3() {
  24. return type3;
  25. }
  26. public void setType3(String type3) {
  27. this.type3 = type3;
  28. }
  29. public String getTitle3() {
  30. try {
  31. return new String(title3.getBytes("ISO-8859-1"), "UTF-8");
  32. } catch (UnsupportedEncodingException e) {
  33. e.printStackTrace();
  34. }
  35. return title3;
  36. }
  37. public void setTitle3(String title3) {
  38. this.title3 = title3;
  39. }
  40. public Map<String, String> getLogin() { return login; }
  41. public void setLogin(Map<String, String> login) { this.login = login; }
  42. public List<String> getUrls() { return urls; }
  43. public void setUrls(List<String> urls) { this.urls = urls; } }

程序启动类:Applaction.java

[java] view plain copy

  1. import java.io.UnsupportedEncodingException;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.boot.SpringApplication;
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. import com.zyd.property.config.PropertiesConfig;
  10. @SpringBootApplication
  11. @RestController
  12. public class Applaction {
  13. @Autowired private PropertiesConfig propertiesConfig;
  14. /**
  15. * 第一种方式:使用`@ConfigurationProperties`注解将配置文件属性注入到配置对象类中
  16. * @throws UnsupportedEncodingException
  17. * @since JDK 1.7 */
  18. @RequestMapping( "/config" ) public Map<String, Object> configurationProperties()
  19. {
  20. Map<String, Object> map = new HashMap<String, Object>();
  21. map.put( "type", propertiesConfig.getType3() );
  22. map.put( "title", propertiesConfig.getTitle3() );
  23. map.put( "login", propertiesConfig.getLogin() );
  24. map.put( "urls", propertiesConfig.getUrls() );
  25. return(map);
  26. }
  27. public static void main( String[] args ) throws Exception
  28. {
  29. SpringApplication application = new SpringApplication( Applaction.class );
  30. application.run( args );
  31. }
  32. }

访问结果:
{"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

[java] view plain copy

  1. import java.io.UnsupportedEncodingException;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.boot.SpringApplication;
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. @SpringBootApplication
  10. @RestController
  11. public class Applaction {
  12. @Value("${com.zyd.type}") private String type;
  13. @Value("${com.zyd.title}") private String title;
  14. /** * * 第二种方式:使用`@Value("${propertyName}")`注解 *
  15. * @throws UnsupportedEncodingException * @since JDK 1.7 */
  16. @RequestMapping("/value") public Map<String, Object> value() throws UnsupportedEncodingException {
  17. Map<String, Object> map = new HashMap<String, Object>();
  18. map.put("type", type);
  19. // *.properties文件中的中文默认以ISO-8859-1方式编码,因此需要对中文内容进行重新编码
  20. map.put("title", new String(title.getBytes("ISO-8859-1"), "UTF-8"));
  21. return map;
  22. }
  23. public static void main(String[] args) throws Exception {
  24. SpringApplication application = new SpringApplication(Applaction.class);
  25. application.run(args);
  26. } }

访问结果:
{"title":"使用@Value获取配置文件","type":"Springboot - @Value"}

三、使用Environment
程序启动类:Applaction.java

[java] view plain copy

  1. import java.io.UnsupportedEncodingException;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.boot.SpringApplication;
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;
  7. import org.springframework.core.env.Environment;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RestController;
  10. @SpringBootApplication
  11. @RestController
  12. public class Applaction {
  13. @Autowired private Environment env;
  14. /** * * 第三种方式:使用`Environment` * * @author zyd * @throws UnsupportedEncodingException * @since JDK 1.7 */
  15. @RequestMapping("/env") public Map<String, Object> env() throws UnsupportedEncodingException {
  16. Map<String, Object> map = new HashMap<String, Object>();
  17. map.put("type", env.getProperty("com.zyd.type2"));
  18. map.put("title", new String(env.getProperty("com.zyd.title2").getBytes("ISO-8859-1"), "UTF-8"));
  19. return map;
  20. }
  21. public static void main(String[] args) throws Exception {
  22. SpringApplication application = new SpringApplication(Applaction.class);
  23. application.run(args);
  24. }
  25. }

访问结果:
{"title":"使用Environment获取配置文件","type":"Springboot - Environment"}
四、使用PropertiesLoaderUtils
app-config.properties

[html] view plain copy

  1. #### 通过注册监听器(`Listeners`) + `PropertiesLoaderUtils`的方式
  2. com.battle.type=Springboot - Listeners
  3. com.battle.title=使用Listeners + PropertiesLoaderUtils获取配置文件
  4. com.battle.name=zyd
  5. com.battle.address=Beijing
  6. com.battle.company=in

PropertiesListener.java 用来初始化加载配置文件

[java] view plain copy

  1. import org.springframework.boot.context.event.ApplicationStartedEvent;
  2. import org.springframework.context.ApplicationListener;
  3. import com.zyd.property.config.PropertiesListenerConfig;
  4. public class PropertiesListener implements ApplicationListener<ApplicationStartedEvent> {
  5. private String propertyFileName;
  6. public PropertiesListener(String propertyFileName) {
  7. this.propertyFileName = propertyFileName;
  8. }
  9. @Override public void onApplicationEvent(ApplicationStartedEvent event) {
  10. PropertiesListenerConfig.loadAllProperties(propertyFileName);
  11. }
  12. }

PropertiesListenerConfig.java 加载配置文件内容

[java] view plain copy

  1. import org.springframework.boot.context.event.ApplicationStartedEvent;
  2. import org.springframework.context.ApplicationListener;
  3. import com.zyd.property.config.PropertiesListenerConfig;
  4. public class PropertiesListener implements ApplicationListener<ApplicationStartedEvent> {
  5. private String propertyFileName;
  6. public PropertiesListener(String propertyFileName) {
  7. this.propertyFileName = propertyFileName;
  8. }
  9. @Override public void onApplicationEvent(ApplicationStartedEvent event) {
  10. PropertiesListenerConfig.loadAllProperties(propertyFileName);
  11. }
  12. }

Applaction.java 启动类

[java] view plain copy

  1. import java.io.UnsupportedEncodingException;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import com.zyd.property.config.PropertiesListenerConfig;
  9. import com.zyd.property.listener.PropertiesListener;
  10. @SpringBootApplication @RestController public class Applaction {
  11. /** * * 第四种方式:通过注册监听器(`Listeners`) + `PropertiesLoaderUtils`的方式 * * @author zyd * @throws UnsupportedEncodingException * @since JDK 1.7 */
  12. @RequestMapping("/listener") public Map<String, Object> listener() {
  13. Map<String, Object> map = new HashMap<String, Object>();
  14. map.putAll(PropertiesListenerConfig.getAllProperty());
  15. return map;
  16. }
  17. public static void main(String[] args) throws Exception {
  18. SpringApplication application = new SpringApplication(Applaction.class);
  19. // 第四种方式:注册监听器 application.addListeners(new PropertiesListener("app-config.properties")); application.run(args); } }

访问结果:

[java] view plain copy

    1. {"com.battle.name":"zyd",
    2. "com.battle.address":"Beijing",
    3. "com.battle.title":"使用Listeners + PropertiesLoaderUtils获取配置文件",
    4. "com.battle.type":"Springboot - Listeners",
    5. "com.battle.company":"in"}

原文地址:https://www.cnblogs.com/muliu/p/8252971.html

时间: 2024-08-25 14:02:00

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

SpringBoot的读取properties文件的方式

转载:https://www.imooc.com/article/18252一.@ConfigurationProperties方式 自定义配置类:PropertiesConfig.java package com.zyd.property.config; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List;

五种方式让你在java中读取properties文件内容不再是难题

一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC+Mybatis整合开发的项目中通过java程序读取properties文件内容的方式进行了梳理和分析,先和大家共享. 二.项目环境介绍 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Id

springBoot使用@Value标签读取*.properties文件的中文乱码问题

上次我碰到获取properties文件中的中文出现乱码问题. 查了下资料,原来properties默认的字符编码格式为asci码,所以我们要对字符编码进行转换成UTF-8格式 原先代码:@PropertySource("classpath:fu.properties") 改后代码:@PropertySource(value="classpath:fu.properties",encoding="utf-8") 然后就不会出现@Value标签读取*

Java读取properties文件工具类并解决控制台中文乱码

1.建立properts文件(error.message.properties) HTTP201= 请求成功并且服务器创建了新的资源 2.在spring-mvc.xml文件(applicationContext-mvc.xml)中配置properties工具类路径及读取properties文件的路径 <bean id="propertyConfigurer" class="com.yjlc.platform.utils.PropertyConfigurer"

Java的Properties类和读取.properties文件

一..properties文件的作用 Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件.它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文本文件来保存,如果是通过File直接保存的话,可能在存储和读取上都不是很方便,但如果保存为Properties文件就不一样了,属性文件都有键值对应的,在JAVA的包中,有提供专门的操作属性文件的类.这个类就是 java.uitl.Properties类,由于Pr

spring使用@Value注解读取.properties文件时出现中文乱码问题的解决

解决办法 在spring中我们常常使用.properties对一些属性进行一个提前配置, spring 在读取*.properties文件时, 默认使用的是asci码, 这时 我们需要对其编码进行转换. 下面列举两种常见的方法. 方法一:在配置spring.xml文件时,声明所需的∗.properties文件时直接使用"utf−8"编码 <context:property-placeholder location="classpath:conf/*.properties

读取Properties文件以及中文乱码问题

在java类中常见的读取Properties文件方式,是使用Properties.load(inputStream);的方式但是常常出现中文乱码问题,这就很尴尬了 public synchronized void load(InputStream inStream) throws IOException { load0(new LineReader(inStream)); } 看了很久才发现,还有一个重载的方法, 它的参数是Reader,如下: public synchronized void

java读取properties文件的方法

盗亦有道: http://blog.csdn.net/lwzcjd/article/details/3116298 http://hi.baidu.com/hgd0324/item/1d5e923973b77c4d033edcaf 这里介绍两种技术:利用spring读取properties 文件和利用java.util.Properties读取(一)利用spring读取properties 文件利用org.springframework.beans.factory.support.Propert

从读取properties文件说开去,浅谈web容器中类加载器

今天刚好有人让我写个通过读取properties连接数据库的小demo. 汗啊,普通项目中可以使用的文件读取,在web项目中总报空指针异常. 查阅了资料明白,赶紧记录下来,希望遇到此类问题的童鞋能引起重视. 废话不说,直接进入主题! 代码清单1: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import java.io.InputStream; import java.util.Properties; import org.apache.log4