【Spring注解系列14】@Profile进行环境切换

1.@Profile

Profile:
     Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能;

开发环境、测试环境、生产环境;
数据源:(/A)(/B)(/C);


@Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件

1)、加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境

2)、写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效

3)、没有标注环境标识的bean在,任何环境下都是加载的;

4)、@Profile可以作用在类上,也可以作用在方法上

 

2.激活环境的两种方式

1、使用命令行动态参数: 在虚拟机参数位置加载 -Dspring.profiles.active=test

【Spring注解系列14】@Profile进行环境切换_第1张图片
2、代码的方式激活某种环境;

AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext() ;
applicationContext.getEnvironment().setActiveProfiles("test");

 

3.实例

@Profile可以用于不同环境数据的动态加载

public class Environment implements Serializable {
    private static final long serialVersionUID = -2794574965009461458L;

    private String envName = "dev";

    public Environment() {
    }

    public Environment(String envName) {
        this.envName = envName;
    }

    public String getEnvName() {
        return envName;
    }

    public void setEnvName(String envName) {
        this.envName = envName;
    }

    @Override
    public String toString() {
        return "Environment{" +
                "envName='" + envName + '\'' +
                '}';
    }
}



//配置类
@Configuration
public class ProfileConfig {

    @Profile("dev")
    @Bean
    public Environment dev(){
        return new Environment();
    }

    @Profile("test")
    @Bean
    public Environment test(){
        return new Environment("test");
    }

    @Profile("prod")
    @Bean
    public Environment prod(){
        return new Environment("prod");
    }

    @Profile("default")
    @Bean("default")
    public Environment defau(){
        return new Environment("default");
    }
}


//测试类
public class ProfileTest {

    /**
     *  1、使用命令行动态参数: 在虚拟机参数位置加载 -Dspring.profiles.active=test
     *  2、代码的方式激活某种环境;
     */
    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext() ;
        //1、创建一个applicationContext
        //2、设置需要激活的环境
        applicationContext.getEnvironment().setActiveProfiles("test");//若将该行注释,则可以看到注入到环境的env为default
        //3、注册主配置类
        applicationContext.register(ProfileConfig.class);
        //4、启动刷新容器
        applicationContext.refresh();
       String[] environments = applicationContext.getBeanNamesForType(Environment.class);
        for (String name : environments) {
            System.out.println(name);
        }
    }
}

 

你可能感兴趣的:(Spring,Spring,Spring注解,@Profile,环境切换)