開發框架-Spring-Profile的配置、激活和讀取

說明一:這裏只展示通過JavaConfig進行配置的方式,暫時沒有通過XML方式的配置。

說明二:這裏假設使用的上下文環境爲SpringBoot。


Spring Profile的配置:

關鍵字:@Profile 註解

這裏以數據庫的配置作爲示例,程序中添加了兩個配置,分別是開發環境和線上環境的數據庫配置,只需根據實際的環境激活相應的配置即可。

import javax.activation.DataSource;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.jndi.JndiObjectFactoryBean;

@Configuration
@ComponentScan
public class DataSourceConfig {

  @Bean(destroyMethod="shutdown")
  @Profile("dev")
  public DataSource EmbeddedDataSource(){
    return (DataSource) new EmbeddedDatabaseBuilder()
          .setType(EmbeddedDatabaseType.H2)
          .addScript("classpath:schema.sql")
          .addScript("classpath:data.sql")
          .build();
  }
 
  @Bean
  @Profile("prod")    
  public DataSource jndiDataSource(){
    JndiObjectFactoryBean jofb = new JndiObjectFactoryBean();
    jofb.setJndiName("jndi/iDS");
    jofb.setResourceRef(true);
    jofb.setProxyInterface(xxx.class);
    return (DataSource) jofb.getObject();
  }
}

Spring Profile的激活:

在程序啓動入口激活相應配置,這裏是上面配置的"dev"(實際上的激活方式有多種,這裏只展示其中一種)

import com.sdsxer.mmdiary.common.Constants;
import com.sdsxer.mmdiary.storage.StorageProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
@EnableConfigurationProperties(StorageProperties.class)
public class Application extends SpringBootServletInitializer {

  // war entry
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    application.profiles("dev");
    return application.sources(Application.class);
  }

  // jar entry
  public static void main(String[] args) throws Exception {
    SpringApplication.run(Application.class, args);
  }
}


Spring Profile的讀取:

關鍵字:Environment

這裏展示了一個過濾器讀取環境變量決定是否進行身份校驗的示例

  @Autowired
  private Environment environment;

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // disable token validation interceptor under dev environment
    String[] profiles = environment.getActiveProfiles();
    if(!ArrayUtils.contains(profiles, "dev")) {
      registry.addInterceptor(new TokenValidationInterceptor()).addPathPatterns("/**");
    }
    super.addInterceptors(registry);
  }


發佈了3 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章