Несколько файлов свойств - PullRequest
3 голосов
/ 23 февраля 2011

В Java-приложении я использую файл .properties для доступа к свойствам конфигурации, относящимся к приложению.
Например,
AppConfig.properties, содержимое которого, скажем,

settings.user1.name=userone
settings.user2.name=usertwo
settings.user1.password=Passwrd1!
settings.user2.password=Passwrd2!  

IЯ получаю доступ к этим свойствам через файл Java - AppConfiguration.java подобно

    private final Properties properties = new Properties();
    public AppConfiguration(){
        properties.load(Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("AppConfig.properties"));
}

Теперь, вместо того чтобы хранить все свойства значения ключа в одном файле, я хотел бы разделить их на несколько файлов (AppConfig1.properties, AppConfig2.properties, AppConfig3.properties и т. Д.).
Я хотел бы знать, возможно ли загрузить эти несколько файлов одновременно.

Мой вопрос не похож на - Несколько файлов .properties в проекте Java

Спасибо.

Ответы [ 4 ]

8 голосов
/ 23 февраля 2011

Да. Просто имейте несколько операторов загрузки.

properties.load(Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("AppConfig1.properties"));
properties.load(Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("AppConfig2.properties"));
properties.load(Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("AppConfig2.properties"));

Все пары ключ-значение будут доступны для использования с помощью объекта свойств.

0 голосов
/ 20 ноября 2012

У меня есть 2 решения для вас:

  • Вы можете иметь разные объекты свойств для разных файлов свойств
  • Вы можете объединить их, используя putAll().

    Properties properties1 = new Properties(); properties1.load(Thread.currentThread().getContextClassLoader() .getResourceAsStream("AppConfig1.properties")); Properties properties2 = new Properties(); properties.load(Thread.currentThread().getContextClassLoader() .getResourceAsStream("AppConfig2.properties")); Properties merged = new Properties(); merged.putAll(properties1); merged.putAll(properties2);

0 голосов
/ 23 февраля 2011

Поскольку Properties объекты фактически являются картами, вы можете использовать все их методы, включая putAll(...). В вашем случае было бы полезно загрузить каждый файл свойств с помощью отдельного объекта Properties, а затем объединить их в свойствах вашего приложения.

0 голосов
/ 23 февраля 2011

Если я понимаю ваш вопрос, вы имеете в виду две цели:

  1. Разбейте один очень большой файл .properties на несколько меньших, где связаны пары (ключ, значение).
  2. Убедитесь, что все файлы .properties доступны в одно и то же время, даже если вы одновременно читаете их с использованием потоков.

В таком случае я бы приступил к разбиению .properties на несколькофайлы и напишите новый класс, который обрабатывает чтение отдельных файлов .properties и объединение всех результатов в один экземпляр Properties.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...