Spring boot 按需启用组件Bean

ConditionalOnProperty 这个注解,可以用于控制某个业务组件,是否开启。

 

当我们在配置文件中加上enabled: true, 开启组件, 没有配置,默认关闭组件

 

这样我们可以定制化一个通用的模块,它是开,还是关,从而达到充分复用代码的目的。

 

比如我们封装好的一个核心Lib, 里面有各种MongoDB, Redis, Mysql ,还有各种外部服务,比如发邮件,发短信。

 

通常我们一个新业务来了,我总是希望能复用这些基础代码类库,但是如果直接引入进来,那就要加一万条配置,烦的一笔。

 

所以我们就利用了ConditionalOnProperty注解,实现了定制化,可以开、关业务组件。

比如我需要发邮件的时候,我就配置文件加一项,如果不需要,就关掉。

 

我们看一下配置长什么样子,在application.yml配置中

 

   

jdbc:
   datasource:
      enabled: true

这里有个JDBC配置, 现在是开启状态。

 

我们看代码中


 

这个组件里面就用到了@ConditionalOnProperty注解,这个class里面有很多Bean,如果条件不满足,它就不会被启动加载, 当需要的时候,你只需要把参数改一下,就可以用了。

关于ConditionalOnProperty的规则,可以查看官方注释说明,以及示例。

 

@Conditional检查指定的属性是否具有特定值。 默认情况下,属性必须存在于环境中,并且不等于false。 具有havingValue()和matchIfMissing()属性允许进行进一步的自定义。

具有havingValue()属性可用于指定该属性应具有的值。 下表显示条件何时根据属性值和havingValue()属性匹配:

Spring boot 按需启用组件Bean

 

如果该属性根本不包含在环境中,则请查询matchIfMissing()属性。 默认情况下,缺少的属性不匹配。

此条件不能可靠地用于匹配收集属性。 例如,在以下配置中,如果环境中存在spring.example.values,则条件匹配,但如果存在spring.example.values [0],则条件不匹配。

@ConditionalOnProperty(prefix = "spring", name = "example.values")
 class ExampleAutoConfiguration {
 }
 

上面的例子 ,你最好换一下,换成自己的变量命名。

 
 

分类: 编程语言 标签: Java 发布于: 2020-12-26 19:31:28, 点击数: