SpringBoot:获取properties配置文件中的值

郎家岭伯爵 2024年04月26日 436次浏览

前言

在 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() 方法来获取类加载器,然后使用类加载器来加载指定路径下的资源文件并返回一个输入流。

具体来说,这个方法的工作原理如下:

  1. 首先,它会根据传入的路径参数来查找资源文件。路径参数可以是绝对路径,也可以是相对于类路径的相对路径。在这个例子中,传入的是 "/application.properties",表示在类路径根目录下寻找名为 application.properties 的文件。
  2. 然后,它会通过类加载器来加载这个资源文件。类加载器会根据类路径去查找资源文件,如果找到了对应的资源文件,就会返回一个输入流。
  3. 最后,它返回一个输入流,允许程序读取资源文件的内容。这个输入流可以被用于读取资源文件中的数据,比如文本内容或二进制数据。

需要注意的是,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 中获取配置文件中的值。