Temat: Konfiguracja w plikach tekstowych

Najlepiej byłoby zrobić to w plikach XML, ponieważ ich struktura dałaby większe możliwości niż tylko [klucz=wartość]. Jakiej klasy użyć do obłsugi XML? Trzeba by użyć singletona do trzymania konfiguracji. Nawiązując do byłej dyskusji czy należałoby to wrzucać do hashtable aby nadpisywanie nie zniszczyło kluczy czy też jest klasa specjalnie do obłsugi konfiguracji? Gdzie najlepiej umieścić plik konfiguracyjny? Najlepiej w katalogu tam gdzie będzie tworzony jar, lub w którymś względem niego zamiast np. w c:\Documents and Settings\Main\Dane aplikacji\, jak odczytać taki katalog?
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Konfiguracja w plikach tekstowych

Czesc,

Zawsze bardziej odpowiadal mi YAML niz xml do configow, mniej klepania znacznie i duzo czytelniejsze. Mozesz uzyc JYaml.

Jesli uzywasz jakiegos FW jak Spring, trzyma sobie je w swoich "bebechac" - nigdy nie wnikalem gdzie, ale mozna bez problemu miec dostep. Dorzucic parser yamla tez nie problem. Jesli nie, no to moze Registry zamiast singletona, zeby juz nie kaleczyc sztuki.

To, gdzie trzymasz pliki configa, zalezy czy masz np projekt pod Mavenem (src/main/resources), jesli nie, to pewnie gdzies do WEB-INF. Ja na ogol robie tak, ze wrzucam domyslny config do uber-jara/wara i robie override configa, ktorego moge wprowadzic z palca (w taki sposob, wywolujac na produkcji, moge sobie podpiac configa skad chce).
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Konfiguracja w plikach tekstowych

Ja się podepnę pod dyskusję. Nie znam YAMLa, a warto update wiedzy zrobić :-)

Jak w YAMLu wygląda walidacja dokumentu/zawartości pliku? Z XML sprawa prosta, tworzymy schemę i walidujemy w oparciu o tę schemę.
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Konfiguracja w plikach tekstowych

Jedyne co znalazlem http://www.kuwata-lab.com/kwalify - napisanie wlasnego raczej nie jest zbyt wymagajace.

konto usunięte

Temat: Konfiguracja w plikach tekstowych

Najszybciej i najłatwiej?

xml doctype z properties, wczytujesz plik, ładujesz do obiektu Properties, wsadzasz do System przez setProperties.

Temat: Konfiguracja w plikach tekstowych

YAML jest rzeczywiście czytelny dla użytkownika, który może sobie podejrzeć konfigurację. Nigdy nie korzystałem z Registry: http://docs.oracle.com/javase/7/docs/api/java/rmi/regi...Ten post został edytowany przez Autora dnia 05.09.13 o godzinie 02:04

Temat: Konfiguracja w plikach tekstowych

Możesz jeszcze rzucić okiem na HOCON:
https://github.com/typesafehub/config/blob/master/HOCON.md

A tutaj jest jedno narzędzie by java properiesy/json/hocon zjednoczyć i związać w ciemności ;)
https://github.com/typesafehub/config

konto usunięte

Temat: Konfiguracja w plikach tekstowych

Proponuję zerknąć na http://commons.apache.org/proper/commons-configuration/
A jeżeli chodzi o springa to
http://docs.spring.io/spring/docs/3.0.x/api/org/spring...
Krzysztof T.

Krzysztof T. Umysł nie jest
naczyniem, które
trzeba napełnić,
lecz ogn...

Temat: Konfiguracja w plikach tekstowych

Pliki props, klucz - wartośc, podczas startu jakiejś klasy załadowac w statycznym bloku

w postaci Properties prosps = new Properties();

a potem props.load(NazwaKlasy.class.getResourceAsStream(/"sciezka_do_Pliku_props");

i gotowe a potem props.getProperties("klucz") i mamy value

Jest jeszcze kilka innych sposobów (W zależności czy robimy to w jakimś frameworku czy nie).

konto usunięte

Temat: Konfiguracja w plikach tekstowych

Gdybyś zdecydowałbyś się na XML-a, polecam frameworka Simple (http://simple.sourceforge.net).
Wystarczy oznaczyć beany adnotacjami i już mamy działający marshalling/unmarshalling.
Framework ten może mieć problemy z odczytaniem szczególnie skomplikowanych plików XML (zwłaszcza gdy chodzi o hashmapy/listy z inline'owymi elementami oraz z atrybutami w różnych dziwnych miejscach). Jeśli jednak nie masz narzuconej odgórnie schemy, to stosując ewentualne kompromisy będziesz w stanie odwzorować dowolną strukturę danych.

Temat: Konfiguracja w plikach tekstowych

Marcin K.:
Możesz jeszcze rzucić okiem na HOCON:
https://github.com/typesafehub/config/blob/master/HOCON.md

A tutaj jest jedno narzędzie by java properiesy/json/hocon zjednoczyć i związać w ciemności ;)
https://github.com/typesafehub/config

Właśnie próbuję HOCONa, ale mam uwagi:
- przykłady są w Scali, choć proste
- z jakiego pliku czytać, jakie jest jego położenie?
Tworzenie obiektu Config za pomocą ConfigFactory.load() - wywołana metoda bez parametrów, za to wcześniej
System.setProperty("simple-lib.whatever", "This value comes from a system property");
nie za bardzo wiem jak to ugryźć.
Pliki .conf są w podkatalogu main/resources katalogu src. Jeśli to zasoby to byłyby dodawane do .jara ale pliki konfiguracyjne nie powinny.
Chcę napisać własny program testowy korzystający z typesafehub/config ale nie wiem, skąd ma czytać pliki konfiguracyjne.
A może lepiej zainteresować się JSON i YAML?
Wspomniane są dwie biblioteki do YAML: JYaml i SnakeYAML.
YAML wygląda nawet na czytelniejszy dla człowieka niż HOCON i JSON, ale czy używane są tabulacje do wcięć? co gdy zamiast tego użyje się różnej ilości spacji, czy różnica w białych znakach spowoduje że plik może być błędny ?
JYaml jest dużo prostsza od SnakeYAML, mało przykładów, tylko na odczyt obiektu z Yaml a nie ma zapisuTen post został edytowany przez Autora dnia 19.09.13 o godzinie 11:33

Temat: Konfiguracja w plikach tekstowych

Andrzej B.:
Właśnie próbuję HOCONa, ale mam uwagi (..)

Rozejrzyj się po ConfigFactory (źródełka tutaj -> https://github.com/typesafehub/config/blob/master/confi..., powinna zainteresować Cię takie metody jak parseFile, parseUrl etc.
Te same informacje oczywiście może Ci podpowiedzieć Twoje IDE, ja akurat wskazuję na kod bo mam fetysz podglądania implementacji ;)
W JavaDoc ConfigFactory znajdziesz odpowiedzi także na twoje pozostałe pytania.
Andrzej B.:
System.setProperty("simple-lib.whatever", "This value comes from a system property");
nie za bardzo wiem jak to ugryźć.

// example of how system properties override; note this
// must be set before the config lib is used
System.setProperty("simple-lib.whatever", "This value comes from a system property")
Komentarz w kodzie chyba mówi wszystko.
Demonstruje on możliwość nadpisywania wartości z poziomu parametrów systemowych.
Możesz spróbować uruchomić jakiś prosty przykład np. z flagą -Dsimple-lib.hello="Cześć!" i zobaczyć co się stanie ;)

W ten sposób możesz konfigurować takie rzeczy jak np. user i hasło bazy danych poprzez command line, lub zmienne środowiskowe na wdrożeniu.

Może dokumentacja play! który używa hocona będzie dla Ciebie przydatna: http://www.playframework.com/documentation/2.0/Configu...
Akka również go używa, możesz poszukać czegoś na jego temat również i tam.
Andrzej B.:
A może lepiej zainteresować się JSON i YAML?

Myślę, że nie powinieneś się zastanawiać czy spróbować tylko starać się znaleźć takie rozwiązanie które lepiej spełni twoje wymagania.
Narzędzie które zasugerowałem także łyka JSON, ale to nie znaczy, że masz używać akurat jego.
Dla mnie osobiście hocon to nie jakaś tam kolejna hipsterska składnia ale takie zabawki jak możliwość wyrażania wartości w jednostkach (zastanawiałeś się kiedyś czy pod kluczem delay są milisekundy, sekundy, minuty, a może dni?), podstawianie (substitiution) czy możliwość użycia include i wydzielenia części wspólnej na zewnątrz.
Mnie to urządza, ale innych nie musi ;)

Temat: Konfiguracja w plikach tekstowych

Właśnie skonczyłem rozgryzanie Yamla z biblioteką SnakeYAML. Domyślnie jest load ze stringa i dump obiektu do stringa, choć można ten string załadować z pliku w UTF-8 z dowolnej ścieżki. Teraz zastanawiam się gdzie umieszczać pliki konfiguracyjne. Zamiast np. "c:\Documents and Settings" wolałbym mieć wszystko w jednym katalogu aby mieć wersję przenośną (w Linuxie chyba to nie jest częste rozwiązanie, pliki konfiguracyjne są w katalogu użytkownika a nie przy binariach). Ścizką do programu to getClass().getProtectionDomain().getCodeSource().getLocation().getPath();,

Z tego co widzę, HOCON ma większe możliwości od Yamla, tak że może warto się zainteresować, aby potem nie migrować na inny format plików konfiguracyjnych, gdy będzie potrzeba.
>W ten sposób możesz konfigurować takie rzeczy jak np. user i hasło bazy danych poprzez
command line, lub zmienne środowiskowe na wdrożeniu.
To jest ciekawsze rozwiązanie, niż stały zapis w kodzie. Muszę się przyjrzeć.
//============================================
Po przyjrzeniu się, wiem mniej więcej skąd czyta plik application.conf - musi być plik o takiej nazwie w bin/, natrafiłem jednak na problemy:
- brak większego przykładu, w HOCON.md są sztuczne, krótkie przykłady jak { a : { x : 1 } }, natomiast pliki aplikacji są zupełnie inne: bardzo dużo komentarzy, klucze składające się z kilku członów po kropce jak application.langs="en" i brak zagnieżdżeń strukturalnych.
- chciałem utworzyć plik .conf za pomocą biblioteki typesafe config, ale klasa Config ma głównie metody getNNN, inne klasy też jak patrzyłem, nie za bardzo się nadają. W jaki sposób utworzyć plik HOCON za pomocą metod klasy?

Nie ma przykładowego kodu do zapisu w formacie HOCON, jedynie parę krótkich programów w Scali dotyczących odczytu. W przykładzie playframework też widzę że pliki conf są read-only.Ten post został edytowany przez Autora dnia 20.09.13 o godzinie 08:45

Temat: Konfiguracja w plikach tekstowych

Po przyjrzeniu się, wiem mniej więcej skąd czyta plik application.conf - musi być plik o takiej nazwie w bin/, natrafiłem jednak na problemy:
Nie, nie musi się tak nazywać oraz nie musi siedzieć akurat w bin/.
Zasugerowałem Ci wcześniej abyś zapoznał się z kodem/dokumentacją fabryki configów:
http://tinyurl.com/ljcskz2
Jeśli będziesz miał taki kaprys, będziesz mógł sobie wczytać hocon nawet z innej maszyny.
Zobacz 3 akapit http://tinyurl.com/jvgpaf4
- brak większego przykładu, w HOCON.md są sztuczne, krótkie przykłady jak { a : { x : 1 } }, natomiast pliki aplikacji są zupełnie inne: bardzo dużo komentarzy, klucze składające się z kilku członów po kropce jak application.langs="en" i brak zagnieżdżeń strukturalnych.
Owszem przykłady są krótkie, ale za to klarowne. Dokumentacja moim zdaniem jest całkiem dobra.
Co do braku zagnieżdżeń - to chyba jedno pokazałeś przytaczając przykład krótkiego przykładu ;)
Najlepiej zacznij eksperymentować. Możesz też wejść na github, poszukać projektów korzystających z Play/Akka i podejrzeć ich configi.
- chciałem utworzyć plik .conf za pomocą biblioteki typesafe config, ale klasa Config ma głównie metody getNNN, inne klasy też jak patrzyłem, nie za bardzo się nadają. W jaki sposób utworzyć plik HOCON za pomocą metod klasy?
Rzuć okiem na
gist.github.com/mkubala/6645234 (przykłady w javie)
gist.github.com/mkubala/6645392 (application.conf do przykładu)

// Edit - podmieniłem linki do javadoc z oryginalnych na aliasy tinyUrl, ponieważ GoldenLine-owa ramka wcianjąca się po kliknięciu na link zachowuje się niczym niesforna panda w markecie (
Obrazek
) i wycina anchory z url..Ten post został edytowany przez Autora dnia 21.09.13 o godzinie 09:56

Następna dyskusja:

Konfiguracja Tomcat




Wyślij zaproszenie do