Pavel Müller
14.4.2011

Konečně profily ve Springu 3.1



Před časem vyšel nový Spring 3.1 M1 a krom jiného zavádí novinku v podobě profilů pro Spring beany. Na něco takového čekáme už od prvních verzí a dosud jsme to obcházeli neelegantními způsoby. Ale je to konečně tady! Podívejme se na to, jak to funguje.

Základní problém je, když potřebujete různé konfigurace pro různá prostředí (vývojové vs. produkční), nebo když potřebujete svůj produkt konfigurovat odlišně pro každého vašeho zákazníka. A přitom to nejde vyřesit nějak jednoduše třeba pomocí properties (PropertyPlaceholderConfigurer). Potřebujete úplně jinou konfiguraci pro jiné prostředí. V jednom bude aplikace nasazená na Tomcatu, v druhém na IBM WebSphere. Transakční konfigurace budou úplně odlišné. Nebo chcete do produktu implementovat autentizaci pomocí databáze i LDAPu, ale potom pro zákazníka jenom zvolit tu vhodnou. Ve Springu 3.1 tedy existují profily. Pomocí nich můžete označit jednotlivé beany nebo celé konfigurační soubory, že budou aktivovány pouze pro daný profil. V XML může podpora pro dva způsoby autentizace ve Spring Security vypadat nějak takto:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="..." xsi:schemaLocation="...">
  <beans profile="auth-db">
    <bean id="authProvider" class="org.spring...DaoAuthenticationProvider"> ... </bean>
  </beans>
  <beans profile="auth-ldap">
    <bean id="authProvider" class="org.spring...LdapAuthenticationProvider"> ... </bean>
  </beans>
</beans>

Pokud ke konfiguraci používáte anotace, existuje nová anotace @Profile, pomocí níž můžete opět řídit v jakém profilu se komponenta použije.

@Service @Profile("google") public class GoogleStockLoader implements StockLoader {}

Profily se aktivují několika způsoby. Buď pomocí API přímo na ApplicationContext nebo pro většinu projektů spíše ve web.xml nebo pomocí systémové proměnné spring.profiles.active.

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext();
ctx.setConfigLocation("orinoco-security.xml");
ctx.getEnvironment().setActiveProfiles("auth-ldap");
ctx.refresh(); 

Doporučuji se podívat na SpringSource blog, kde je více informací o profilech a novinkách ve Springu 3.1. Doufám, že tahle verze vyjde brzo, abychom to mohli co nejdřív začít používat.

Vaše emailová adresa nebude zveřejněna

Komentáře

Děkujeme za váš komentář
Další
  • Volám 3x hurá! Díky za článek, tohle jsem neznal.