11、@ConditionalOnExpression
组合 @Conditional
注解,当 SpEL 表达式为 true 时才开启配置。
@Configuration @ConditionalOnExpression("${enabled:false}") public class BigpipeConfiguration { @Bean public OrderMessageMonitor orderMessageMonitor(ConfigContext configContext) { return new OrderMessageMonitor(configContext); } }
12、@ConditionalOnJava
组合@Conditional
注解,当运行的 Java JVM 在指定的版本范围时才开启配置。
13、@ConditionalOnResource
组合 @Conditional
注解,当类路径下有指定的资源才开启配置。
@Bean @ConditionalOnResource(resources="classpath:shiro.ini") protected Realm iniClasspathRealm(){ return new Realm(); }
14、@ConditionalOnJndi
组合 @Conditional
注解,当指定的 JNDI 存在时才开启配置。
15、@ConditionalOnCloudPlatform
组合 @Conditional
注解,当指定的云平台激活时才开启配置。
16、@ConditionalOnSingleCandidate
组合 @Conditional
注解,当指定的 class 在容器中只有一个 Bean,或者同时有多个但为首选时才开启配置。
17、@ConfigurationProperties
Spring Boot可使用注解的方式将自定义的properties文件映射到实体bean中,比如config.properties
文件。
@Data @ConfigurationProperties("rocketmq.consumer") public class RocketMQConsumerProperties extends RocketMQProperties { private boolean enabled = true; private String consumerGroup; private MessageModel messageModel = MessageModel.CLUSTERING; private ConsumeFromWhere consumeFromWhere = ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET; private int consumeThreadMin = 20; private int consumeThreadMax = 64; private int consumeConcurrentlyMaxSpan = 2000; private int pullThresholdForQueue = 1000; private int pullInterval = 0; private int consumeMessageBatchMaxSize = 1; private int pullBatchSize = 32; }
18、@EnableConfigurationProperties
当@EnableConfigurationProperties
注解应用到你的@Configuration
时,任何被@ConfigurationProperties
注解的beans将自动被Environment
属性配置。 这种风格的配置特别适合与SpringApplication
的外部YAML配置进行配合使用。
@Configuration @EnableConfigurationProperties({ RocketMQProducerProperties.class, RocketMQConsumerProperties.class, }) @AutoConfigureOrder public class RocketMQAutoConfiguration { @Value("${spring.application.name}") private String applicationName; }
19、@AutoConfigureAfter
用在自动配置类上面,表示该自动配置类需要在另外指定的自动配置类配置完之后。
如 Mybatis 的自动配置类,需要在数据源自动配置类之后。
@AutoConfigureAfter(DataSourceAutoConfiguration.class) public class MybatisAutoConfiguration { }
20、@AutoConfigureBefore
这个和@AutoConfigureAfter
注解使用相反,表示该自动配置类需要在另外指定的自动配置类配置之前。
21、@AutoConfigureOrder
Spring Boot 1.3.0中有一个新的注解@AutoConfigureOrder
,用于确定配置加载的优先级顺序。
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) // 自动配置里面的最高优先级 @Configuration @ConditionalOnWebApplication // 仅限于web应用 @Import(BeanPostProcessorsRegistrar.class) // 导入内置容器的设置 public class EmbeddedServletContainerAutoConfiguration { @Configuration @ConditionalOnClass({ Servlet.class, Tomcat.class }) @ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT) public static class EmbeddedTomcat { // ... } @Configuration @ConditionalOnClass({ Servlet.class, Server.class, Loader.class, WebAppContext.class }) @ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT) public static class EmbeddedJetty { // ... } }