覆盖自动配置的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 = “文件名” 来设置。
方式二、通过属性文件外置配置
修改配置属性值,便可完成对配置的微调。修改需要再可以获取配置信息的地方完成,可以获取配置信息位置包括以下几种:(提示:优先以靠前的属性作为配置,也就是靠前的会覆盖靠后的)
- 命令行参数
- java:comp/env 里的 JNDI 属性
- JVM 系统属性
- 操作系统环境变量
- 随即生成的带 random.* 前缀的属性(在设置其他属性时,可以引用,如$(random.long))
- 应用程序以外的 application.properties 或 application.yml 文件
- 打包在应用程序内的 application.properties 或 application.yml 文件
- 通过 @PropertySource 标注的属性源
- 默认的属性
对于application.properties 和 application.yml 文件说明:
两个文件可以放在以下位置:(说明:同样优先级由高到,具有覆盖性,且 application.yml 文件的属性会覆盖 application.properties 的同种属性) - 外置,在应用程序运行目录的 /config 子目录中
- 外置,在应用程序运行的目录中
- 内置,在 config 包中
- 内置,在 Classpath 根目录
可配置的属性有很多,例如端口号、Thymeleaf的模板缓存、ssl、日志、数据库、数据源、某些位置所需的固定值等