Файл свойств, кажется, создает исключение нулевого указателя? - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь изменить базовый URL-адрес с помощью значения, хранящегося в файле свойств, что делает процесс изменения среды более простым, однако при запуске моих тестов значение URL-адреса, по-видимому, содержит ноль вместо типа среды,

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) является правильным, есть идеи?

1 Ответ

0 голосов
/ 04 марта 2019

Похоже, файл свойств не найден.Вы можете отследить его, напечатав исключение (вместо 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();
}

Класс Config:

    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();
    }

Вы можете напечатать нужный env:

System.out.println(config.getEnv());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...