当前位置: 首页 > 编程笔记 >

详解SpringBoot读取resource目录下properties文件的常见方式

司空健
2023-03-14
本文向大家介绍详解SpringBoot读取resource目录下properties文件的常见方式,包括了详解SpringBoot读取resource目录下properties文件的常见方式的使用技巧和注意事项,需要的朋友参考一下

个人理解

在企业开发中,我们经常需要自定义一些全局变量/不可修改变量或者参数来解决大量的变量重复问题,当需要这个全局变量时,只需要从配置文件中读取即可,根据开发中常见的情况,可以分为以下两种情况,分别是:

  • 配置文件为SpringBoot默认的application.properties文件中的自定义参数
  • 加载自定义properties文件中的自定义参数,比如xxx.properties的自定义参数

加载SpringBoot默认的application.properties

准备工作

server.port=8081

# 自定义参数->都是person.变量名的形式

person.id=1
person.name=szh

# list/set/数组->两种写法
person.hobby=play,read,write
person.family[0]=father
person.family[1]=mother

# map->两种写法
person.map.key1=value1
person.map[key2]=value2

# Entity对象->Pet实体类
person.pet.type=dog
person.pet.name=旺财
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Pet implements Serializable {
 private String type;
 private String name;
}

方式一 : @ConfigurationProperties

开发中如果获取整个以xxx开头的所有参数,那么推荐使用第一种方式,如果获取单个参数,那么建议使用第二种获取参数方式。

import com.szh.test.entity.Pet;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Component
@ConfigurationProperties(prefix = "person")
@Data
public class PersonConfig {
 private int id;
 private String name;
 private List hobby;
 private String[] family;
 private Map map;
 private Pet pet;

}

测试使用代码:

@Autowired
 private PersonConfig personConfig;

 @RequestMapping("/hello1")
 public void hello1() {
 System.out.println(personConfig.getFamily());
 System.out.println(personConfig.getHobby());
 System.out.println(personConfig.getMap());
 System.out.println(personConfig.getId());
 System.out.println(personConfig.getName());
 System.out.println(personConfig.getPet().getName());
 }

方式二:@Value

@Value("${person.id}")
 private int id;
 @Value("${person.name}")
 private String name;
 @Value("${person.hobby}")
 private List hobby;
 @Value("${person.family}")
 private String[] family;
 @Value("${person.map}")
 private Map map;
 @Value("${person.pet}")
 private Pet pet;

方式三:使用Environment获取

@Autowired
 private Environment env;

 @RequestMapping("/hello1")
 public void hello1() throws UnsupportedEncodingException {

 String id = env.getProperty("person.id");
 // 中文
 String name = new String(env.getProperty("person.name").getBytes("ISO-8859-1"), "UTF-8");
 List hobby = new ArrayList();
 hobby.add(env.getProperty("person.hobby[0]"));
 hobby.add(env.getProperty("person.hobby[1]"));
 String[] family;
 Map<String,String> map = new HashMap<String,String>();
 map.put("key1", env.getProperty("person.map.key1"));
 map.put("key2", env.getProperty("person.map.key2"));

 Pet pet = new Pet(env.getProperty("person.pet.type"),env.getProperty("person.pet.name"));
 }

加载自定义properties文件

准备工作:在resource/目录下新建一个自定义配置文件szh.properties

person.id=1
person.name=szh

# list/set/数组->两种写法
person.hobby=play,read,write
person.family[0]=father
person.family[1]=mother

# map->两种写法
person.map.key1=value1
person.map[key2]=value2

# Entity对象
person.pet.type=dog
person.pet.name=旺财

方式一: @PropertySource+@ConfigurationProperties

@Component
@PropertySource(value = "classpath:szh.properties")
@ConfigurationProperties(prefix = "person")
@Data
public class PersonConfig {
 private int id;
 private String name;
 private List hobby;
 private String[] family;
 private Map map;
 private Pet pet;

}

方式二:@PropertySource+@Value

@Component
@PropertySource(value = "classpath:szh.properties")
@Data
public class PersonConfig {
 @Value("${person.id}")
 private int id;
 @Value("${person.name}")
 private String name;
 @Value("${person.hobby}")
 private List hobby;
 @Value("${person.family}")
 private String[] family;
 @Value("${person.map}")
 private Map map;
 @Value("${person.pet}")
 private Pet pet;

}

方式三:Properties加载

//读取资源配置文件
 InputStream is = Bean.class.getClassLoader().getResourceAsStream("szh.properties");
 prop = new Properties();
 String className = "person.name";//可以作为一个函数的变量
 try {
  prop.load(is);
  String pathName = prop.getProperty(className);
 } catch (Exception e) {
  throw new RuntimeException("xxxx");
 }

到此这篇关于SpringBoot读取resource目录下properties文件的常见方式的文章就介绍到这了,更多相关SpringBoot读取properties文件内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍java读取resource目录下文件的方法示例,包括了java读取resource目录下文件的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文主要介绍的是java读取resource目录下文件的方法,比如这是你的src目录的结构 我们希望在Test.java中读取test.txt文件中的内容,那么我们可以借助Guava库的Resource类 示例代码如下 核心函数就是Reso

  • 本文向大家介绍java读取properties文件的方法,包括了java读取properties文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java读取properties文件的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的java程序设计有所帮助。

  • 本文向大家介绍Java 读写Properties配置文件详解,包括了Java 读写Properties配置文件详解的使用技巧和注意事项,需要的朋友参考一下 Java 读写Properties配置文件 1.Properties类与Properties配置文件   Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集。不过Properties有特殊

  • 本文向大家介绍python读取目录下最新的文件夹方法,包括了python读取目录下最新的文件夹方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇python读取目录下最新的文件夹方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 本文向大家介绍php读取目录及子目录下所有文件名的方法,包括了php读取目录及子目录下所有文件名的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php读取目录及子目录下所有文件名的方法,分享给大家供大家参考。具体实现方法如下: 一般来说php中读取目录下的文件名的方式确实不少,最简单的是scandir,具体代码如下: 稍微复杂点的,来自于php手册: 这些都只能读取当前指定目录下的文

  • 本文向大家介绍java读取properties配置文件的方法,包括了java读取properties配置文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java读取properties配置文件的方法。分享给大家供大家参考。具体分析如下: 这两天做java项目,用到属性文件,到网上查资料,好半天也没有找到一个满意的方法能让我读取到.properties文件中属性值,很是郁闷,网上讲

  • 本文向大家介绍java递归读取目录下所有文件的方法,包括了java递归读取目录下所有文件的方法的使用技巧和注意事项,需要的朋友参考一下 java递归读取目录下的所有文件(包含子目录下的所有文件)大概思路如下:通过file.listFiles()方法获取目录下的所有文件(包含子目录下的所有文件),得到files[]数组,然后遍历得到的所有文件,通过isFile(文件)和isDirectory(文件夹

  • 本文向大家介绍WinForm实现读取Resource中文件的方法,包括了WinForm实现读取Resource中文件的方法的使用技巧和注意事项,需要的朋友参考一下 有些情况下,在开发一些C#小项目的时候,交付给别人用的时候就是单独EXE文件,但是若涉及什么EXCEL,图片什么的时候,比较麻烦,这时候可以将EXCEL存放在Resource中,那么怎么读取出来呢?本文介绍了WinForm实现读取Res