Загрузка различных интеграций из файла свойств - PullRequest
0 голосов
/ 12 июня 2019

Я работаю над проектом для финала в Uni, и у меня возникла особая проблема. Я проверяю, как работает определенный веб-сайт на локальном хосте, используя TestNG и Selenium. Теперь у меня есть разные интеграции, то есть он использует разные базы данных, настроенные в файле свойств. Я надеялся, что смогу передать параметры в JVM или в командной строке, например, "Integration1", и это будет ловить это поле из файла свойств. Единственное, что я нашел в Интернете, касается профилей Spring, но это бесполезно, поскольку это обычный проект Java. Вот код:

default.properties

db_driver = com.mysql.jdbc.Driver
db_path = jdbc:mysql://localhost:3306/dana?useUnicode=true&characterEncoding=UTF-8

user.properties (проверяет, существует ли определенное поле в файле user.properties и использует ли оно это поле вместо значения по умолчанию, полезно для других членов команды, поскольку каждая конфигурация отличается)

db_driver = com.mysql.jdbc.Driver
db_path_elixir = jdbc:mysql://localhost:3306/elixir?useUnicode=true&characterEncoding=UTF-8
db_path_dana = jdbc:mysql://localhost:3306/dana?useUnicode=true&characterEncoding=UTF-8
#db_path - actual path which will be used if user passes "dana" or "elixir" as arguments
#my logic would be something like db_path = jdbc:mysql://localhost:3306/ + ${integration} + ?useUnicode=true&characterEncoding=UTF-8

Эти файлы свойств настроены в классе ConfigurationService

ConfigurationService.java

...
private String getProperty(String key) {
    if (userProperties.containsKey(key)) {
        return userProperties.getProperty(key);
    }
    return defaultProperties.getProperty(key);
}

1 Ответ

0 голосов
/ 12 июня 2019

Вы можете изменить свой ConfigurationService следующим образом и передать свойство как java -Dkey=value из командной строки.

private String getProperty(String key){
    String value = null;
    if (System.getProperties().contains(key))
        value = System.getProperty(key);
    else if (userProperties.containsKey(key))
        value = userProperties.getProperty(key);
    else
        value = defaultProperties.getProperty(key);
}

Вы также можете инициализировать свой экземпляр ConfigurationService, как показано ниже

Properties properties;
public void init(){
 properties.putAll(defaultProperties);
 properties.putAll(userProperties);
 properties.putAll(System.getProperties());
}

затем измените ваш метод getProperty, как показано ниже

private String getProperty(String key){
        return properties.getProperty(key);
}

Здесь важна последовательность вызова putAll. При повторном введении того же значения ключа предыдущее значение перезаписывается.

...