1. 程式人生 > >Spring 之 Profile

Spring 之 Profile

Profile

為在不同環境下使用不同的配置提供了支援(如開發環境和生產環境下的資料庫配置不同).

    • 通過設定 Environment 的 ActiveProfiles 來設定當前 context 需要使用的配置環境.在開發中使用 @Profile 註解類或者方法,達到不同環境下選擇例項化不同的 Bean.
    •  通過設定 jvm 的 spring.profiles.active  引數來設定配置環境.
    • Web 專案設定在 Servlet 的 context parameter 中.

示例:

package com.pangu.profile;

public class DemoBean {
    private String content;

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

    public void setContent(String content) {
        this.content = content;
    }
    
}
package com.pangu.profile;

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

/**
 * @ClassName: ProfileConfig
 * @Description: TODO(這裡用一句話描述這個類的作用)
 * @author etfox
 * @date 2018年6月25日 上午9:00:58
 *
 * @Copyright: 2018 www.etfox.com Inc. All rights reserved.
 */
@Configuration
public class ProfileConfig {

    @Bean
    @Profile("dev")
    public DemoBean devDemoBean(){
        return new DemoBean("from development profile");
    }
    
    @Bean
    @Profile("prod")
    public DemoBean proDemoBean(){
        return new DemoBean("from production profile");
    }
    
}
package com.pangu.profile;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class TestMain {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext application = 
                new AnnotationConfigApplicationContext();
        
        application.getEnvironment().setActiveProfiles("prod");//設定 profile
        application.register(ProfileConfig.class);//註冊配置類
        application.refresh();//重新整理容器
        
        DemoBean demoBean = (DemoBean)application.getBean(DemoBean.class);
        System.out.println(demoBean.getContent());
        
        application.close();
    }

}

執行結果:

八月 23, 2018 9:14:43 上午 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
資訊: Refreshing org.spring[email protected]5d099f62: startup date [Thu Aug 23 09:14:43 CST 2018]; root of context hierarchy
from production profile
八月 23, 2018 9:14:43 上午 org.springframework.context.annotation.AnnotationConfigApplicationContext doClose
資訊: Closing org.spring[email protected]5d099f62: startup date [Thu Aug 23 09:14:43 CST 2018]; root of context hierarchy