この例では、Spring MVC Webアプリケーションでアクティブな `@ Profile`を設定する方法を説明します。

@Profileの例

@Configuration
public class AppConfig {

    @Profile("dev")
    @Bean
    public CacheManager cacheManager() {
       //...
    }

    @Profile("live")
    @Bean
    public EhCacheManagerFactoryBean ehCacheCacheManager() {
       //...
    }

    @Profile("testdb")
    @Bean
    public DataSource dataSource() {
       //...
    }

}

Springでアクティブな

@ Profile`を設定するには、

spring.profiles.active`システムプロパティで値を定義します。

1. web.xml

`web.xml`ファイルを含む通常のWebアプリケーションの場合。

1.1アクティブなプロファイルを設定します。

web.xml

    <context-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>live</param-value>
    </context-param>

1.2複数のアクティブなプロファイルを設定します。

web.xml

    <context-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>dev, testdb</param-value>
    </context-param>

2.サーブレット3.0コンテナ

Webアプリケーションには `web.xml`ファイルがありません。次のいずれかの方法を使用してください:

2.1 `onStartup`を上書きする

MyWebInitializer.java

package com.mkyong.servlet3;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;

public class MyWebInitializer extends
    AbstractAnnotationConfigDispatcherServletInitializer {

   //...

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
        servletContext.setInitParameter("spring.profiles.active", "live");

       //Set multiple active profile
       //servletContext.setInitParameter("spring.profiles.active", "dev, testdb");
    }

}

2.2

@ Profile

beanをロードするコンテキスト(ルートまたはサーブレット)に依存します。

MyWebInitializer.java

package com.mkyong.servlet3;

import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class MyWebInitializer extends
    AbstractAnnotationConfigDispatcherServletInitializer {

   //If the @Profile beans are loaded via root context
    @Override
    protected WebApplicationContext createRootApplicationContext() {

        WebApplicationContext context =
                     (WebApplicationContext)super.createRootApplicationContext();
            ((ConfigurableEnvironment)context.getEnvironment()).setActiveProfiles("live");

       //Set multiple active profiles
       //((ConfigurableEnvironment)context.getEnvironment())
               //         .setActiveProfiles(new String[]{"live", "testdb"});

            return context;

    }

   //If the @Profile beans are loaded via servlet context
   /**
    @Override
    protected WebApplicationContext createServletApplicationContext() {

        WebApplicationContext context =
                     (WebApplicationContext)super.createServletApplicationContext();
            ((ConfigurableEnvironment)context.getEnvironment()).setActiveProfiles("dev");
            return context;

    }** /
}