springboot 根据配置文件的不同,选择注入不同的bean

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot 根据配置文件的不同,选择注入不同的bean相关的知识,希望对你有一定的参考价值。

参考技术A 1.场景描述
业务系统中,配置文件不同,使用的业务逻辑也不同。我们可以使用模板方法模式把业务分成多个service。如下图

2.ConditionalOnProperty源码说明

3.如何使用
AbstractServiceImpl1-- 默认使用的方法

UserServiceImpl1--

UserServiceImpl2--

使用时,直接注入service,会根据配置文件来选择哪个service生效

4.上面是针对一个配置项,如果有多个配置项,可以使用@ConditionalOnExpression,来根据表达式来选择使用哪个service
ConditionalOnExpression 源码说明

使用起来也比较方便
@ConditionalOnExpression("!$sence.cascade.enable:false && $sence.cascade.test:0 == 2")

springboot yaml配置注入

SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的

  • application.properties

    • 语法结构 :key=value

  • application.yml

    • 语法结构 :key:空格 value

配置文件的作用 :修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;

比如我们可以在配置文件中修改Tomcat 默认启动的端口号。《server.port=8081》

yaml基础语法

说明:语法要求严格!

1、空格不能省略

2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。

3、属性和值的大小写都是十分敏感的。

注意:

  • “ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;

    比如 :name: "kuang \\n shen"   输出 :kuang  换行   shen

  • \'\' 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出

    比如 :name: ‘kuang \\n shen’   输出 :kuang  \\n   shen

对象、Map(键值对)

对象、Map格式:
 k(方法):     
   v1: 值   
   v2: 值

行内写法

student: {name: qinjiang,age: 3}

 

数组( List、set )

用 - 值表示数组中的一个元素,比如:

pets:
  - cat
  - dog
  - pig

行内写法:
pets: [cat,dog,pig]


在使用yaml配置注入是需要加上这两个注解
@Component //注册bean
@ConfigurationProperties(prefix = "yaml里方法的名字")

狂神说SpringBoot03:yaml配置注入 (qq.com)












以上是关于springboot 根据配置文件的不同,选择注入不同的bean的主要内容,如果未能解决你的问题,请参考以下文章

记一次springboot @Value注解无法注入配置文件的错误

springboot项目在IDEA根据不同的开发人员读取不同的配置文件

SpringBoot的Profiles根据开发环境和测试环境载入不同的配置文件

Spring生态研习:Springboot中bean的条件注入

SpringBoot--注入指定的配置文件

springboot----四yaml配置注入