代码改变世界

Profile

2016-07-17 00:59  faunjoe88  阅读(338)  评论(0编辑  收藏  举报

  Profile为在不同环境下使用不同的配置提供了支持(开发环境下的配置和生产环境下的配置肯定是不同的,例如,数据库的配置)
    1.通过设定Environment的ActiveProfiles来设定当前context需要使用的配置环境。在开发中使用@Profile注解类或者方法,
达到在不同情况下选择实例化不同的Bean
    2.通过设定jvm的spring.profiles.active参数来设置配置环境。
    3.Web项目设置在Servlet的context.parameter中。

实例

  1.示例Bean

package com.wisely.highlight_spring4.ch2.profile;

public class DemoBean {
private String content;

public DemoBean(String content) {
super();
this.content = content;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}
}

Profile配置
package com.wisely.highlight_spring4.ch2.profile;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
public class ProfileConfig {
@Bean
@Profile("dev") //1
public DemoBean devDemoBean() {
return new DemoBean("from development profile");
}

@Bean
@Profile("prod") //2
public DemoBean prodDemoBean() {
return new DemoBean("from production profile");
}
}

代码解释
Profile 为dev时实例化devDemoBean.
Profile 为prod时实例化prodDemoBean.

运行

package com.wisely.highlight_spring4.ch2.profile;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

public static void main(String[] args) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext();

context.getEnvironment().setActiveProfiles("dev"); //1
context.register(ProfileConfig.class);//2
context.refresh(); //3

DemoBean demoBean = context.getBean(DemoBean.class);

System.out.println(demoBean.getContent());

context.close();
}
}


代码解释
1.先将活动的Profile设置为prod
2.后置注册Bean配置类,不然会报Bean未定义的错误。
3.刷新容器。


将context.getEnvironment().setActiveProfiles("prod")修改为context.getEnvironment().setActiveProfiles("dev")