Bean Definition Profiles i Spring 3.1

Chris Beams bloggar om nya features från milestone-release nummer ett av kommande Spring Framework 3.1. I den första artikeln visar han ”Bean Definition Profiles”. Ett användningsområde för profiler är att kunna scopa in och ut komponenter beroende på om du exekverar din applikation i utvecklingsmiljön eller i produktionsmiljön. Han exemplifierar med klassikern att använda olika datakällor för utveckling och produktion:

<beans profile="dev">
    <jdbc:embedded-database id="dataSource">
        <jdbc:script
            location="classpath:com/bank/config/sql/schema.sql"/>
        <jdbc:script
            location="classpath:com/bank/config/sql/test-data.sql"/>
    </jdbc:embedded-database>
</beans>
<beans profile="production">
    <jee:jndi-lookup
        id="dataSource"
        jndi-name="java:comp/env/jdbc/datasource"/>
</beans>

Det finns olika sätt att aktivera dessa profiler – exempelvis via web.xml, direkt i javakoden eller som en system-property.

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>production</param-value>
    </init-param>
</servlet>
ctx.getEnvironment().setActiveProfiles("test");
-Dspring.profiles.active="active"

Den andra artikeln visar hur man snyggt kan använda profiler mha annoteringen @Profile och visar lite exempel javabaserad konfiguration via @Configuration.

Läsvärt!