前言
在 SpringBoot 项目中,某些配置项需要根据环境的不同进行配置,例如服务请求的 URL 在 dev 环境和 prod 环境通常是不一样的,这样的配置就需要在配置文件中配置,使用时根据环境的不同灵活获取。
那么在这种场景下,我们该如何实现呢?
实现
url.properties
我们创建 url.properties 来保存远程服务的 URL:
test.property.value=langjialingbojue
PropertiesUtil.java
创建 PropertiesUtil.java 读取配置文件:
package com.langjialing.helloworld.util;
import java.io.InputStream;
import java.util.Properties;
/**
* @author 郎家岭伯爵
* @time 2024/4/26 14:23
*/
public class PropertiesUtil {
private static final Properties CONFIGS = new Properties();
static {
try{
final InputStream inputStream = PropertiesUtil.class.getResourceAsStream("/application.properties");
CONFIGS.load(inputStream);
} catch (Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static String getProperty(String key){
return CONFIGS.getProperty(key);
}
}
理论补充
Properties
类在 Java 中用于管理属性文件,通常以键值对的形式存储配置信息。它是 java.util.Properties
类的一部分,提供了一种简单的方式来加载、存储和操作属性配置。
getResourceAsStream()
方法是 Java 中用于获取类路径下资源文件的一种常用方式。它是 java.lang.Class
类中的一个方法,通过调用类的 getClassLoader()
方法来获取类加载器,然后使用类加载器来加载指定路径下的资源文件并返回一个输入流。
具体来说,这个方法的工作原理如下:
- 首先,它会根据传入的路径参数来查找资源文件。路径参数可以是绝对路径,也可以是相对于类路径的相对路径。在这个例子中,传入的是
"/application.properties"
,表示在类路径根目录下寻找名为application.properties
的文件。 - 然后,它会通过类加载器来加载这个资源文件。类加载器会根据类路径去查找资源文件,如果找到了对应的资源文件,就会返回一个输入流。
- 最后,它返回一个输入流,允许程序读取资源文件的内容。这个输入流可以被用于读取资源文件中的数据,比如文本内容或二进制数据。
需要注意的是,getResourceAsStream()
方法返回的输入流不会抛出 FileNotFoundException
,即使资源文件不存在也不会报错,而是会返回 null
。因此,在使用这个方法时,需要注意对返回值进行判断,确保资源文件被正确加载。
测试类
在控制器里写一个测试 Controller 来调用方法:
@GetMapping("/t21")
public String test21(){
final String property = PropertiesUtil.getProperty("test.property.value");
System.out.println("property配置为:" + property + ".");
return property;
}
输出:
property配置为:langjialingbojue.
正确获取配置文件中的值。
总结
SpringBoot 中获取配置文件中的值。