這篇文章主要介紹了通過實(shí)例了解Spring中@Profile的作用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
公司主營業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出蕭縣免費(fèi)做網(wǎng)站回饋大家。
根據(jù)系統(tǒng)環(huán)境的不同,Profile可以用來切換數(shù)據(jù)源。例如切換開發(fā),測試,生產(chǎn)環(huán)境的數(shù)據(jù)源。
舉個(gè)例子:
先創(chuàng)建配置類MainProfileConfig:
@Configuration @PropertySource("classpath:/jdbc.properties") public class MainProfileConfig implements EmbeddedValueResolverAware { @Value("${db.user}") private String user; private String driverClass; private StringValueResolver stringValueResolver; @Profile("test") @Bean("testDataSource") public DataSource getTestDataSource(@Value("${db.password}") String pwd) throws PropertyVetoException { ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource(); comboPooledDataSource.setUser(user); comboPooledDataSource.setPassword(pwd); comboPooledDataSource.setDriverClass(driverClass); return comboPooledDataSource; } @Profile("dev") @Bean("devDataSource") public DataSource getDevDataSource(@Value("${db.password}") String pwd) throws PropertyVetoException { ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource(); comboPooledDataSource.setUser(user); comboPooledDataSource.setPassword(pwd); comboPooledDataSource.setDriverClass(driverClass); return comboPooledDataSource; } @Profile("pro") @Bean("proDataSource") public DataSource getproDataSource(@Value("${db.password}") String pwd) throws PropertyVetoException { ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource(); comboPooledDataSource.setUser(user); comboPooledDataSource.setPassword(pwd); comboPooledDataSource.setDriverClass(driverClass); return comboPooledDataSource; } @Override public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) { this.stringValueResolver = stringValueResolver; driverClass = stringValueResolver.resolveStringValue("${db.driverClass}"); } }
這里使用@Value和StringValueResolver來給屬性賦值
測試:運(yùn)行的時(shí)候設(shè)置環(huán)境 -Dspring.profiles.active=dev
public class ProFileTest { @Test public void test(){ AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainProfileConfig.class); String[] beanNamesForType = applicationContext.getBeanNamesForType(DataSource.class); for (String name : beanNamesForType){ System.out.println(name); } applicationContext.close(); } }
打印輸出:
devDataSource
也可以使用代碼的方式設(shè)置系統(tǒng)環(huán)境,創(chuàng)建容器的時(shí)候使用無參構(gòu)造方法,然后設(shè)置屬性。
@Test public void test(){ //創(chuàng)建容器 AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(); //設(shè)置需要激活的環(huán)境 applicationContext.getEnvironment().setActiveProfiles("test"); //設(shè)置主配置類 applicationContext.register(MainProfileConfig.class); //啟動刷新容器 applicationContext.refresh(); String[] beanNamesForType = applicationContext.getBeanNamesForType(DataSource.class); for (String name : beanNamesForType){ System.out.println(name); } applicationContext.close(); }
打印輸出:
testDataSource
setActiveProfiles設(shè)置環(huán)境的時(shí)候可以傳入多個(gè)值,它的方法可以接受多個(gè)參數(shù)。
public interface ConfigurableEnvironment extends Environment, ConfigurablePropertyResolver { void setActiveProfiles(String... var1);
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。