属性文件似乎产生了空指针异常?

采样点

我试图通过存储在属性文件中的值来更改基本 URL,这使得更改环境的过程更加简单,但是在触发我的测试时,URL 的值似乎包含 null,而不是环境类型。

public class Global_Vars {
    private static String testEnvironment;

        static {
            try{
                Properties props = new Properties();
                File file = new File(Global_Vars.CONFIG_PROPERTIES_DIRECTORY);
                FileInputStream fileInput = new FileInputStream(file);
                props.load(fileInput);

                // process properties content
                testEnvironment = props.getProperty("testEnvironment");
            } catch (Exception ex) {
                ex.getMessage();
            }
    }

    //GLOBAL URL's
    public static String HOMEPAGE_URL = "https://" + testEnvironment + ".deltaway.co.uk/";

我的属性文件包含以下值:

testEnvironment=test3

属性目录(Global_Vars.CONFIG_PROPERTIES_DIRECTORY)的位置也是正确的,有什么想法吗?

沙哈尔·罗特施泰因

似乎找不到属性文件。您可以通过打印异常(而不是 ex.getMessage() --> 抛出异常或将其写入日志/控制台)来跟踪它。

注意属性文件的位置。资源文件的推荐位置是:src/main/resources

以下代码(基于您的代码)将解决问题:

    package main;

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

    public class PopertiesFileSeemsToBeProducingANullPointerException {

        private static String testEnvironment;
        private static final String CONFIG_PROPERTIES_DIRECTORY = "src/main/resources/envs.properties";

        //GLOBAL URL's
        public static String HOMEPAGE_URL = "https://" + testEnvironment + ".deltaway.co.uk/";

        static {
            try{
                Properties props = new Properties();
                File file = new File(PopertiesFileSeemsToBeProducingANullPointerException.CONFIG_PROPERTIES_DIRECTORY);
                FileInputStream fileInput = new FileInputStream(file);
                props.load(fileInput);

                // process properties content
                testEnvironment = props.getProperty("testEnvironment");
            } catch (Exception ex) {
                System.out.println(ex.getMessage());
            }
        }

        public static void main(String[] args) {
            System.out.println(testEnvironment);

        }

    }

但我不建议使用此代码,因为它有一些问题:

  1. 资源泄漏 - 输入流未正确关闭。
  2. 静态代码 - 难以测试且难以维护
  3. 没有常数

更好的实现将是添加一个接口 Iconfig 和实现该接口的 Config 类

我建议通过以下方式解决问题:

IConfig 接口:

public interface IConfig {
    public void init();
}

配置类:

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

    import lombok.Data;

    @Data
    public class Config implements IConfig{
        private final  String PROPERTIES_FILE = "envs.properties";
        private final  String ENVIRONMENT = "testEnvironment";  
        private String env;

        public void init(){
            try(InputStream is = this.getClass().getClassLoader().getResourceAsStream(PROPERTIES_FILE)){
                Properties props = new Properties();
                props.load(is);
                env = props.getProperty(ENVIRONMENT);
            } catch (IOException e) {
                throw new RuntimeException("Failed to read properties file due to IO issues");
            }
        }
    }

在驱动程序中加载配置:

    @Autowired
    IConfig config;

    private void loadConfig() {
        config.init();
    }

您可以打印所需的环境:

System.out.println(config.getEnv());

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章