Конфігураційна система Java [закрита]


75

Я перебуваю у процесі відсіювання всіх жорстко закодованих значень у бібліотеці Java і цікавився, який фреймворк буде найкращим (з точки зору конфігурації з нулем або близькістю до нуля) для обробки конфігурації часу виконання? Я віддав би перевагу файлам конфігурації на основі XML, але це не важливо.

Будь ласка, відповідайте лише якщо у вас є практичний досвід роботи з фреймворком. Я не шукаю приклади, але досвід ...


Раніше я також боровся з цим і нарешті спирався на java.utils.Properties, конфігурацію Apache Commons, Google Guava та Maven, щоб створити конфігураційне рішення, близьке до нуля, яке ми фактично налаштовуємо для старих систем, але просто використовуємо коробки для нових. Остання ітерація на Maven Central: github.com/sofdes/config-generation-maven-plugin
user1016765

Відповіді:


29

Якщо ваші жорстко закодовані значення - це просто прості пари ключ-значення, вам слід переглянути java.util.Properties . Він набагато простіший за xml, простіший у використанні та надзвичайно тривіальний у реалізації.

Якщо ви працюєте з Java, а дані, які ви зберігаєте або отримуєте з диска, змодельовані як пара значень ключа (що здається у вашому випадку), то я справді не можу уявити кращого рішення.

Я використовував файли властивостей для простої конфігурації невеликих пакунків у великому проекті та як більш глобальну конфігурацію для цілого проекту, і у мене ніколи з цим не було проблем.

Звичайно, це має величезну вигоду, оскільки не вимагає використання сторонніх бібліотек.


2
Хоча властивості здебільшого прості, як ви вже сказали, навантаження менше. Перевірте javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html
Джеймс МакМахон

4
+1 Для властивостей, якщо вам потрібні лише пари ключ / значення. Як тільки вам починають потрібні списки чи карти, настав час перейти до іншого рішення.
NateS

Я віддаю перевагу відповіді @ John - навіть якщо ви використовуєте властивості, важливо мати певний фреймворк, щоб ви могли згодом переключити базову реалізацію, не переписуючи весь свій код. stackoverflow.com/questions/25765/java-configuration-framework / ...
ripper234

42

Конфігурація Apache Commons чудово працює. Він підтримує збереження конфігурації в широкому діапазоні форматів на серверній панелі, включаючи властивості, XML, JNDI та багато іншого. Він простий у використанні та подовженні. Щоб отримати максимальну гнучкість, використовуйте фабрику, щоб отримати конфігурацію, і просто використовуйте інтерфейс конфігурації після цього.

Дві особливості конфігурації Commons, які відрізняють його від прямого файлу властивостей, полягає в тому, що він підтримує автоматичне перетворення на загальноприйняті типи (int, float, масиви рядків) і підтримує заміну властивостей:

server.host=myHost
server.url=http://${server.host}/somePath


20

Ось різні варіанти:

Можливо, ви захочете прочитати Порівняння конфігурації Commons із JFig та JConfig та Налаштування своїх програм за допомогою JFig для отримання відгуків від різних користувачів.

Особисто я використовував jConfig, і це було гарним досвідом.


6

Спільна конфігурація

Ми використовуємо це. Обробляти лише файли властивостей набагато простіше, але якщо вам потрібно представити більш складні конфігурації спільних даних, ви можете це зробити і також прочитати файли властивостей.

Якщо ви не робите нічого складного, я б дотримувався файлів Properites.


5

Якщо ви хочете зробити щось просунуте (і безпечне для типу), ви можете поглянути на це: http://www.ibm.com/developerworks/java/library/j-configint/index.html


Я під "просунутим" маю на увазі "зроби сам", тоді: так. Але я більше націлювався на існуючі рамки, а не на "зроби сам". Але приємна стаття в будь-якому випадку.
Стін

5

Інтелектуальний засіб використання параметрів (InPUT, сторінка ) дозволяє екстерналізувати майже будь-яке (жорстко закодоване) рішення як параметр у файл конфігурації на основі XML. Він був розпочатий на початку 2012 року як відповідь на відчутні недоліки в існуючих інструментах конфігурації щодо загальності та відокремлення проблем.

InPUT, мабуть, потужніший, ніж вимагає більшість випадків використання, оскільки дозволяє незалежне від мови програмування формулювання експериментальних даних (вхід - вихід) з такими функціями, як визначення складного дескриптора до зіставлення класів , або рандомізоване появу та перевірку конфігурації на основі заздалегідь визначені діапазони значень (для випробувань та досліджень, наприклад, моделювання Монте-Карло). Ви можете визначити параметри з допоміжними параметрами, відносними обмеженнями на значення параметрів (числовий параметр a> параметр b) тощо.

Він все ще в бета-версії, але досить стабільний, і я використовую його для своїх досліджень, для налаштування та документування експериментів та для навчальних цілей . Після того, як він стане доступним для інших мов (адаптер C ++ у конвеєрі), інші дослідники / практики можуть повторно використовувати дескриптори, що виконують їх реалізації тих самих алгоритмів у C ++ (використовуючи концепцію відображення коду). Таким чином, експериментальні результати можна перевірити / програми можна перенести легше . Документація все ще працює, але є кілька прикладів на цій сторінці . InPUT - це програмне забезпечення з відкритим кодом .

Для зацікавлених - Концептуальна наукова робота .


3

Я схильний користуватися java.util.Properties(або подібними класами іншими мовами та фреймворками) загорнуті у клас конфігурації, специфічний для програми, більшу частину часу, але мене дуже цікавлять альтернативи чи варіації щодо цього. Тим більше, що все може стати дещо складним, якщо задіяні графічні діалогові вікна конфігурації або декілька переглядів даних конфігурації.

На жаль, я не маю досвіду роботи з конкретними бібліотеками для Java (крім тих, які я написав сам), але будь-які вказівки були б вдячні.

Оновлення

ГАРАЗД. Це було не зовсім так, три - це проект конфігурації Spring Java .


2

Я писав про це пару тижнів тому і дійшов висновку, що XML - одна з найбільш широко використовуваних позначень.

Це найкраще? Я не думаю, що мені дуже подобається JSON, але інструментарій все ще не залежить від XML, тому, мабуть, нам доведеться почекати і подивитися.


1

Ви можете спробувати YamlBeans . Таким чином ви пишете будь-які класи, в яких ви хочете зберігати свої конфігураційні дані, тоді ви можете автоматично писати та читати їх до та з YAML.

YAML - це зручний для читання формат даних. Він має виразнішу силу, ніж java.util.Properties. Ви можете мати списки, карти, якорі, набрані дані тощо.


1

Будь ласка, подивіться на цю URL-адресу: http://issues.apache.org/jira/browse/CONFIGURATION-394

Фреймворк конфігурації, який ми шукаємо, є чимось поверх Apache Commons Configuration і повинен підтримувати випуски паралельності, проблеми JMX та більшість магазинів (наприклад, файл .properties, файли .xml або PreferencesAPI).

Те, що команда weblogic надає на «Консолі адміністрування», цікавить, через що ви можете отримувати транзакційні (атомні) оновлення конфігурацій, щоб зареєстровані слухачі отримували сповіщення.

Хлопці Apache наполягають на тому, що цей проект вийшов за рамки конфігурації Commons, можливо!

Я додав просту структуру конфігурації, подивіться, будь ласка.


1

Я щойно опублікував короткий фрагмент коду про використання ClassPathResource Spring як альтернативи IoC. ClassPathResource дозволяє розміщувати файли властивостей де завгодно на шляху до класу (наприклад, все в одному місці або як однорангові програми для коду, який вони налаштовують. У моєму прикладі просто використовується java.util.Properties, тому ви можете використовувати відкритий текст "ім'я = значення") або його формат XML.


0

Властивості файлів дуже прості, якщо вам потрібно щось більш функціональне, ви можете відформатувати деякі файли конфігурації як класи Java. Вони можуть бути поміщені в інший пакет / модуль і можуть бути попередньо скомпільовані або завантажені під час виконання з такою бібліотекою, як BeanShell.

Примітка: У найпростішому випадку (попередньо складеному) вам не потрібні додаткові бібліотеки.


0

Щодо пропозицій щодо використання java.util.Properties - починаючи з jdk 1.5, API налаштувань (java.util.prefs) видається найкращою альтернативою використанню API властивостей.

Причини: підвищена масштабованість, внутрішній нейтралітет тощо.


Я деякий час користувався Налаштуваннями, але це така
проблема

API налаштувань є досить грубим. Крім того, я бачив, як він повністю зазнав збою в Linux через деякі проблеми з дозволами. Крім усього цього, Параметри не можуть замінити Властивості, оскільки вони переміщують конфігурацію у центральне місце. Це впливає на вас, якщо ви хочете, щоб на одному комп’ютері працювало більше одного екземпляра вашої програми. Наприклад, Параметри не є хорошим місцем для зберігання конфігурації для WAR.
NateS

0

Ви можете поглянути на нещодавно анонсований tools4j-config , завдання якого полягає у тому, щоб дозволити вам легко обробляти конфігурацію під час виконання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.