Environment Abstraction,环境抽象,指的是Spring通过Environment接口方便地从环境变量或配置文件中读取数据。

Spring容器的Environment接口包含两个重要概念或模块:profiles和properties。

profiles:有active或inactive两个状态,只有active状态的profiles指定的资源才会生效、或者才会被注入到Spring容器中。

properties指的是包括:

properties files, JVM system properties, system environment variables, JNDI, servlet context parameters, ad-hoc Properties objects, Map objects, and so on

等在内的资源。

profiles和properties结合使用,可以实现:通过profiles指定在什么条件或环境下、哪一类或哪些资源文件或环境变量、参数会生效,或者哪些bean definition会被加载到Spring容器中。

比如,通过profiles分别指定开发环境、测试环境和生产环境的配置文件。

Bean Definition Profiles

通过@Profile注解实现不同环境下加载不同的Bean,例如:

@Configuration
@Profile("development")
public class StandaloneDataConfig {

    @Bean
    public DataSource dataSource() {
        ...
    }
}

@Profile可以支持操作符:! & |,分别代表逻辑运算符not and or。

比如:@Profile({"p1", "!p2"}),表示p1激活、或者p2没有被激活的情况下生效。

@Profiles作用在@Configuration下表示这个配置文件下的所有bean都遵循其约定,作用在@Bean、或@Component上则表示当前bean遵循其约定。

激活Profile

Spring支持通过以下方式激活Profiles:

  1. 编程式:Environment的setActiveProfiles方法
  2. 配置spring.profiles.active参数:通过系统环境变量、 JVM system properties、servlet context parameters...等

可以通过:@Profile("default")方式指定默认Profile,Spring没有检测到上述任何方式指定Profiles的情况下,缺省设置生效。

上一篇 Spring FrameWork从入门到NB - BeanPostProcessor
下一篇 Spring FrameWork从入门到NB - ApplicationContext


45 声望17 粉丝