Programátoři bezpo­chyby trpí syndro­mem: „Kód, který napsal někdo jiný, stojí za starou belu.“ Nejlepší na učení je sice přečíst tuny lepšího kódu, jenže jako konzul­tant se spíše utvrzuji v tom, že jedinou metrikou kvality kódu je WTF za minutu. SQL dotazy v JSP? To nic není, co teprv SQL Injec­tion na druhou – klientský JavaS­cript vykonávající libovolný databázový dotaz na serveru. Věřím, že mezi čtenáři nejsou autoři oněch řádků. Přesto jsou i menší prohřešky, kterých by stálo za to se zbavit: Zadrátování konfi­gu­race!

Temnota

Konfi­gu­race je zadráto­vaná. Build děláte z works­pace, nejčas­těji zakomen­továním a odkomen­továním řádků. Baví vás to ještě? Kdy se vám napos­ledy povedl release napoprvé?

Prozření

Konfi­gu­race je vytažená do samos­tat­ného souboru (nebo více souborů), např. property file. Bohužel konfi­gu­rační soubory jsou součástí waru, což znamená, že pro různá prostředí děláte nový build. Nebo snad editu­jete již hotové warko?

Osvícení

Konfi­gu­rační soubory jsou vytažené mimo war, existuje jediný build pro všechna prostředí. Ctíte princip confi­gu­ra­tion by convention – rozumné výchozí nasta­vení, které je možné překrýt.

Jak na to

Zmíněné vývojové stupně konfi­gu­race se mohou vzájemně překrývat. Používa­te-li Spring, tak máte k dispo­zici elegantní řešení.

Nebo kratší zápis s použitím names­pace context.

A co že jste to vlastně nakonfi­gu­ro­vali? Proměné v násle­dujícím tvaru budou nahra­zeny hodno­tami z property souboru myApp.properties.

${my.variable}

Mód SYSTEM_PROPERTIES_MODE_OVERRIDE značí, že se nejprve prohle­dají systémové proper­ties před soubory. Soubor myApp.properties se nachází v adresáře (nebo i na síti) speci­fi­ko­vaném jako systémová property. Pro potřeby vývoje je za dvojtečkou uvedena výchozí hodnota, v našem případě claspath.

-DmyApp.config.location=...

Na class­path je soubor je pro potřeby works­pace. Je umístěn mimo struk­turu mavenu, např. adresář /etc/conf, který si v IDE přidáme na class­path. Konfi­gurák tak není součástí warka, jak jsme si přáli, ale potře­bu­jeme ho spolu s warkem distri­buo­vat. Pomůže vám třeba Maven Assembly Plugin, který vám do jednoho zip souboru zabalí kromě warka a konfi­guráků třeba inicia­li­zační skripty a další věci, co uznáte za vhodné.

To tolik nebolí, nemyslíte?

Anketa