Spring自动装配(三)-@Profile根据环境注册Bean

文章目录

@Profile

通常我们开发一个项目都要经过测试环境,UAT环境的测试后才能发布到生产环境。那就存在一个问题,每个环境的数据库连接地址都不一样,部署每个环境都要改配置,然后重新打包。很明显这样做非常不方便且不合理。Spring提供了一个非常强大的注解@Profile就解决了这种问题。
@Profile根据指定环境决定创建指定环境的bean。

使用

新建DBconfig类

public class DBConfig {
    public DBConfig(String address) {
        this.address = address;
    }

    private String address;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

使用@Profile注册各个环境的Bean

@Configuration
public class AppConfig {

    @Profile("test")
    @Bean
    public DBConfig dbConfigTest() {
        return new DBConfig("192.168.1.122");
    }

    @Profile("uat")
    @Bean
    public DBConfig dbConfigUat() {
        return new DBConfig("10.11.2.49");
    }

    @Profile("prod")
    @Bean
    public DBConfig dbConfigProd() {
        return new DBConfig("10.11.1.66");
    }
 }

初始化容器指定当前环境为uat,然后输出地址

public class Application {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
        annotationConfigApplicationContext.getEnvironment().setActiveProfiles("uat");
        annotationConfigApplicationContext.register(AppConfig.class);
        annotationConfigApplicationContext.refresh();

        DBConfig dbConfig = annotationConfigApplicationContext.getBean(DBConfig.class);
        System.out.println(dbConfig.getAddress());
    }
}

在这里插入图片描述
也可以使用idea VM options指定当前环境
在这里插入图片描述
注意事项:

  1. 当没指定当前环境时,所有被@Profile标识的Bean都不会被注册到容器中
  2. annotationConfigApplicationContext.getEnvironment().setActiveProfiles(“uat”);设置优先级高于VM options
  3. 如果@Profile标识在类上,那么类上的指定的环境不是当前环境,类里面所有@Profile标识的Bean无论是不是当前环境都不会注册到容器中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值