You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java应用全局调用config.properties中的hostName变量?

问题描述

我在RFIDMainDlg.java的main方法中加载了config.properties文件中的变量,代码如下。现在需要在RFIDBase.java等多个类中调用其中的hostName变量,请问该如何实现?

代码示例:

public static void main(String args[]) throws IOException  {

       Properties prop=new Properties();
       FileInputStream ip= new FileInputStream("resources/config.properties");
       prop.load(ip);
                   
       String hostName = prop.getProperty("hostName");
       System.out.println(hostName);
       
}

解决方案

下面是几种实用的实现方式,可根据项目规模选择:

方式1:创建单例配置类(推荐)

专门做一个配置管理类,程序启动时加载配置,其他类通过单例实例获取配置项,避免重复加载和全局变量混乱。

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class ConfigManager {
    // 单例实例,双重校验锁保证线程安全
    private static volatile ConfigManager instance;
    private Properties properties;

    // 私有构造,禁止外部实例化
    private ConfigManager() {
        properties = new Properties();
        try {
            FileInputStream ip = new FileInputStream("resources/config.properties");
            properties.load(ip);
        } catch (IOException e) {
            // 根据需求处理异常,比如抛运行时异常或打日志
            throw new RuntimeException("加载配置文件失败", e);
        }
    }

    // 获取单例实例
    public static ConfigManager getInstance() {
        if (instance == null) {
            synchronized (ConfigManager.class) {
                if (instance == null) {
                    instance = new ConfigManager();
                }
            }
        }
        return instance;
    }

    // 对外提供获取hostName的方法
    public String getHostName() {
        return properties.getProperty("hostName");
    }

    // 若有其他配置项,可添加类似方法
    // public String getPort() {
    //     return properties.getProperty("port");
    // }
}

在RFIDBase.java中调用:

String hostName = ConfigManager.getInstance().getHostName();

方式2:用静态变量存储配置

在RFIDMainDlg中定义静态变量,加载配置后赋值,其他类直接访问该静态变量,适合小型简单项目。

修改RFIDMainDlg.java:

public class RFIDMainDlg {
    // 定义静态变量存储hostName
    public static String hostName;

    public static void main(String args[]) throws IOException  {
        Properties prop=new Properties();
        FileInputStream ip= new FileInputStream("resources/config.properties");
        prop.load(ip);
        
        hostName = prop.getProperty("hostName");
        System.out.println(hostName);
    }
}

在RFIDBase.java中调用:

String hostName = RFIDMainDlg.hostName;

注意:必须保证main方法先执行,否则变量会为null,仅适用于程序入口就是该main的场景。

方式3:全局共享Properties实例

把加载好的Properties实例设为全局可访问,其他类直接从实例中获取配置项。

修改RFIDMainDlg.java:

public class RFIDMainDlg {
    public static Properties globalProps;

    public static void main(String args[]) throws IOException  {
        globalProps = new Properties();
        FileInputStream ip= new FileInputStream("resources/config.properties");
        globalProps.load(ip);
        
        String hostName = globalProps.getProperty("hostName");
        System.out.println(hostName);
    }
}

在RFIDBase.java中调用:

String hostName = RFIDMainDlg.globalProps.getProperty("hostName");

这种方式可获取所有配置项,但直接暴露Properties实例缺乏封装性,仅建议在简单场景使用。


内容的提问来源于stack exchange,提问作者Ryan Fitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:20:49