覆盖自动配置的Bean

覆盖自动配置的Bean

方式一、显示自定义 Bean

若需要覆盖自动配置的 Bean,只需要自定义一个配置 Bean 即可,SpringBoot 会自动跳过该 Bean 的自动配置。自定义配置 Bean 只需要拓展该 Bean ,加上所需要的注解或使用 xml 配置即可。

原因:

SpringBoot 自动配置的 Bean 使用了 @ConditionalOnMissingBean(xxx.class) 注解,该注解为当 Classpath中 没有xxx.class 时才创建并注册该 Bean。 SpringBoot 加载时先加载应用程序的配置,再加载自动配置;因此,当应用程序中已经有了自定义的配置时,该注解发现 Classpath 中已存在该配置类,于是不加载自动配置的 Bean。

根据条件选择不同的 Bean

在自定义 Bean 上使用 @Profile(“xxx”) 注解,这时,若在程序启动时有 xxx 的 active 属性配置,则选择自定义 Bean;若没有,则选择自动配置。例如在 application.properties 中添加 spring.profile.active = xxx ,则选择自定义的 Bean 作为配置。Profile 的属性值可以设置在一个文件中,通过 spring.profiles = “文件名” 来设置。

方式二、通过属性文件外置配置

修改配置属性值,便可完成对配置的微调。修改需要再可以获取配置信息的地方完成,可以获取配置信息位置包括以下几种:(提示:优先以靠前的属性作为配置,也就是靠前的会覆盖靠后的)

  1. 命令行参数
  2. java:comp/env 里的 JNDI 属性
  3. JVM 系统属性
  4. 操作系统环境变量
  5. 随即生成的带 random.* 前缀的属性(在设置其他属性时,可以引用,如$(random.long))
  6. 应用程序以外的 application.properties 或 application.yml 文件
  7. 打包在应用程序内的 application.properties 或 application.yml 文件
  8. 通过 @PropertySource 标注的属性源
  9. 默认的属性
    对于application.properties 和 application.yml 文件说明:
    两个文件可以放在以下位置:(说明:同样优先级由高到,具有覆盖性,且 application.yml 文件的属性会覆盖 application.properties 的同种属性)
  10. 外置,在应用程序运行目录的 /config 子目录中
  11. 外置,在应用程序运行的目录中
  12. 内置,在 config 包中
  13. 内置,在 Classpath 根目录


    可配置的属性有很多,例如端口号、Thymeleaf的模板缓存、ssl、日志、数据库、数据源、某些位置所需的固定值等

你可能感兴趣的:(java,spring,boot,spring)