Spring MVC - Comment définir un profil actif

Spring MVC - Comment définir le profil actif

Dans cet exemple, nous allons vous montrer comment définir des@Profile actifs dans une application Web Spring MVC.

Exemples @Profile

@Configuration
public class AppConfig {

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

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

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

}

Pour définir les@Profile actifs dans Spring, définissez une valeur via la propriété systèmespring.profiles.active.

1. web.xml

Pour les applications Web normales, qui contiennent le fichierweb.xml.

1.1 Set an active profile.

web.xml

    
        spring.profiles.active
        live
    

1.2 Set multiple active profile.

web.xml

    
        spring.profiles.active
        dev, testdb
    

2. Conteneur Servlet 3.0+

Pour les applications Web ne disposant pas de fichierweb.xml, utilisez l'une des méthodes suivantes:

2.1 Override onStartup

MyWebInitializer.java

package com.example.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 Depends which context (root or servlet) to load the @Profile beans.

MyWebInitializer.java

package com.example.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;

    }*/

}