美文网首页
spring Profile定义

spring Profile定义

作者: xzz4632 | 来源:发表于2019-06-20 20:00 被阅读0次

Environment

在spring中, Environment是对应用环境的抽象(即对Profileproperties的抽象).

Profile

Profile定义了应用环境,即开发, 生产, 测试等部署环境的抽象.

定义容器当前的profile
编程式

通过Environment API:

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); //ApplicationContext实现类
// Environment API, 参数为String可变数组
ctx.getEnvironment().setActiveProfiles("dev");
ctx.register(Config.class);
ctx.refresh();  
声明式

声明式方式是指配置spring.profiles.active属性.有以下几种方式:

  • 系统环境变量
  • JVM系统属性
    命令行参数指定
-Dspring.profiles.active="profile1,profile2"
  • web.xml定义servlet context参数
    <context-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>dev</param-value>
    </context-param>
  • JNDI实体
  • 默认定义
    在没有指定spring.profiles.active的情况下, spring会使用一个默认值,即default.可以自定义这个值: 一是通过EnvironmentsetDefaultProfiles()定义; 二是通过spring.profiles.default定义. 具体使用方法同上.
profile配置

profile的配置方式有两种, 一是java注解配置, 二是xml配置

@Profile配置

@Profile可以用在上, 还可以用在方法上. 用于在不同的环境加载不同的配置.
示例

  • 用于类上:
@Configuration
@Profile("development")
public class StandaloneDataConfig {

}
  • 用于方法上:
@Configuration
public class AppConfig {

    @Bean("dataSource")
    @Profile("development")
    public DataSource standaloneDataSource() {
        return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.HSQL)
            .addScript("classpath:com/bank/config/sql/schema.sql")
            .addScript("classpath:com/bank/config/sql/test-data.sql")
            .build();
    }

    @Bean("dataSource")
    @Profile("production")
    public DataSource jndiDataSource() throws Exception {
        Context ctx = new InitialContext();
        return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
    }
}

注1: 用于方法上时, 可能是在不同环境对同一个bean的加载, 由于类中不允许存在签名完全相同的方法, 故可用@Bean("beanName")来定义不同的方法指向同一个bean.
注2: 如果一个配置类中有多个@Bean重载方法. 在所有的重载方法上定义的@Profile注解定义应当一致,否则只有第一个声明有效.

!符号使用
@Profile注解中还可以使用!符号, 如@Profile({"p1", "!p2"}), 表示在p1激活, p2没有激活时注册它们.

XML配置

通过<beans>元素的profile属性来定义, <beans>元素可嵌套, 即可将分开定义的xml定义在同一个xml文件中.但定义在同一个xml中最相关的<beans>元素放在xml文件最后.

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xsi:schemaLocation="...">

    <!-- other bean definitions -->

    <beans profile="development">
      <!-- bean定义 -->
    </beans>

    <beans profile="production">
      <!-- bean定义 -->
    </beans>
</beans>

相关文章

网友评论

      本文标题:spring Profile定义

      本文链接:https://www.haomeiwen.com/subject/axxdqctx.html