开发框架-Spring-Profile的配置、激活和读取

来源:互联网 发布:js url 中文乱码 编辑:程序博客网 时间:2024/06/05 04:17

说明一:这里只展示通过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@ComponentScanpublic 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);  }