Programátoři bezpochyby trpí syndromem: „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 konzultant 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 Injection na druhou – klientský JavaScript 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í konfigurace!

Temnota

Konfigurace je zadrátovaná. Build děláte z workspace, nejčastěji zakomentováním a odkomentováním řádků. Baví vás to ještě? Kdy se vám naposledy povedl release napoprvé?

Prozření

Konfigurace je vytažená do samostatného souboru (nebo více souborů), např. property file. Bohužel konfigurační soubory jsou součástí waru, což znamená, že pro různá prostředí děláte nový build. Nebo snad editujete již hotové warko?

Osvícení

Konfigurační soubory jsou vytažené mimo war, existuje jediný build pro všechna prostředí. Ctíte princip configuration by convention – rozumné výchozí nastavení, které je možné překrýt.

Jak na to

Zmíněné vývojové stupně konfigurace se mohou vzájemně překrývat. Používate-li Spring, tak máte k dispozici elegantní řešení.

Nebo kratší zápis s použitím namespace context.

A co že jste to vlastně nakonfigurovali? Proměné v následujícím tvaru budou nahrazeny hodnotami z property souboru myApp.properties.

${my.variable}

Mód SYSTEM_PROPERTIES_MODE_OVERRIDE značí, že se nejprve prohledají systémové properties před soubory. Soubor myApp.properties se nachází v adresáře (nebo i na síti) specifikované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 classpath je soubor je pro potřeby workspace. Je umístěn mimo strukturu mavenu, např. adresář /etc/conf, který si v IDE přidáme na classpath. Konfigurák tak není součástí warka, jak jsme si přáli, ale potřebujeme ho spolu s warkem distribuovat. Pomůže vám třeba Maven Assembly Plugin, který vám do jednoho zip souboru zabalí kromě warka a konfiguráků třeba inicializační skripty a další věci, co uznáte za vhodné.

To tolik nebolí, nemyslíte?

Anketa