在实际的项目开发中,经常遇到根据不同的环境做出不同的配置的需求,springboot中提供了将不同的配置写在指定的环境配置文件中,服务器启动时回读取指定的配置文件,做出对应的装配。为了应对更加灵活的装配不同的环境或@Bean,springboot还提供了其他的方式,在此介绍三种可选的条件装配方式。
- Profile
@Bean
@Profile("dev")
public Object init() {
System.out.println("dev环境时装配bean");
return new Object();
}
@Bean
@Profile("prod")
public Object init() {
System.out.println("prod环境时装配bean");
return new Object();
}
- Conditional
public class EnvCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return "true".equalsIgnoreCase(context.getEnvironment().getProperty("***.***"));
}
}
@Component
@Conditional(EnvCondition.class)
public class ***Service {
//...
}
- ConditionalOnProperty
@Component
@ConditionalOnProperty(name="***.***", havingValue="true")
public class ***Service {
//...
}
当在properties文件中读取***.***的值等于true时,会实例化***Service对象;反之,不会创建对象。
以上3中方式都可以进行条件装配,可根据具体业务需求选择应用,推荐搭建应用@ConditionalOnProperty的方式。