SpringBoot 基础特性
自定义Banner
SpringBoot 可以通过修改配置文件定义自己的启动Banner
默认SpringBoot会在 /resources/Banner.txt 中找启动Banner
也可以通过修改配置文件设置Banner:
# 修改Banner文件
spring.banner.location=classpath:/resources/aaa.txt
# 开启或关闭Banner功能
spring.main.banner-mode=CONSOLE/OFF/LOG
可到此处生成Banner字:https://www.bootschool.net/ascii
Profiles 开发环境定义
SpringBoot支持在不同的开发环境下激活不同的情况,如一些对象,Bean可以定义在某些开发环境下开启,某些环境下关闭,也可以设置在任何环境下都开启等功能,形成一种环境隔离能力,能过切换不同的环境,就能快速切换运行条件。
注意:SpringBoot 默认提供了以文件为单位的环境配置,如 application-dev.yaml 这种文件,对于spring.profiles.active和default是不生效的
标识环境
标识环境指的是我们需要在程序中指定各方面的对像或配置设置为特定的环境定义,以备后面我们作为环境分组进行切换。
- 任何@Component, @Configuration 或 @ConfigurationProperties 可以使用 @Profile 标记,来指定何时被加载
- 在代码中使用 @Profile 注解来定义该类、方法、变量归属什么环境
- 比如 @Profile("test") 则表示标注的代码只会在 test 环境下生效
- 比如 @Profile({"test","dev"}) 则表示标注的代码只会在 test 和 dev 环境下生效
- 配置环境中使用 spring.profiles.active=test,dev 进行设定当前程序运行环境
- 也可以使用运行时增加命令行 --spring.profiles.active=test,dev 来设定运行的环境
关于 @Profile 标记的几个情况:
- 设置 @Profile 可以设置为单个环境,也可以设置多个环境
- 若不设置 @Profile 的类、方法、变量,激活任何环境都生效
- @Profile 的默认环境是 "default",当类、方法、变量设置为 @Profile("default") 时,激活环境 default 时,或不指定环境时能生效
- 当 类、方法、变量设置为 @Profile("default") 时,激活非 default 环境时不生效
- 可在配置中指定默认的环境 spring.profiles.default=test 时,则 test 将成为默认环境
总结:如果想在任何时候都生效,则不要加入 @Profile 注解,设置了 @Profile("default") 注解的,只能激活 default 或不定义时才能生效。
环境包含
对于希望在任何环境下,也要把主要的环境包含在内时,我们可以使用环境包含,比如一些必要的包,设置为一个必要的环境,在不管test还是dev还是prod环境下,它们都需要被引入,可以使用环境包含。
使用 spring.profiles.include=sql,xxx,abc,则这三个环境,不管我当前激活的是那个环境,这三个环境都会被引入
生效的环境 = 激活的环境/默认环境 + 包含的环境
环境分组
可以设置为一个环境的组别,当激活时,可以连带一个组别的所有环境都激活
具体配置为
spring.profiles.group.xxx=dev,test
# 定义一个叫 xxx 的环境组,组里有 dev 和 test 环境
spring.profiles.active=xxx
激活一个组的环境,效果将为把xxx组里的dev和test都生效
Profile 配置文件
application.properties 是SpringBoot 的主配置文件,但是SpringBoot允许创建子配置文件,通过规范,我们可以创建以下的子配置文件以用在其它环境上
- application-dev.properties > 说明我们在配置坏境上创建了一个叫 dev 的环境,当我们使用 spring.profiles.active=dev 时,该配置环境将会生效
- application-xxx.properties > 创建一个为xxx的环境
- 命名规则为 application-{profile标识}.propertyies
- 分支配置文件中不允许使用 spring.profiles.active 这些选项
分支配置文件的优先级会比 application.properties 优先级高
外部配置文件规则
对于配置文件来说,application.properties 文件都是默认放在包中的,那如果我们需要在运行时调用配置文件,我们需要在包外面创建配置文件来扩展配置
其配置文件的优先级如下:优先级 从低到高,红色的是我们平时比较常用的
- 低
- 通过 SpringApplication.setDefaultProperties 指定的参数,即在容器上下文 applicationContext中设置 setProperties()
- 在配置类中(即 @Configuration)加入 @PropertySource() 标记指定配置文件,如 @PropertySource("classpath:aaa.properties")。
- 此功能与配置文件中配置 spring.config.import=aaa.properties 相同
- 配置文件,如包中的 application.properties 文件
- RandomValuePropertySource 支持的 random.* 配置,如 @Value("${random.ini}")
- OS 操作系统的环境变量
- Java 系统属性 (System.getProperties())
- JNDI 属性 (java:comp/env)
- ServletContext 初始化参数
- ServletConfig 初始化参数
- SPRING_APPLICATION_JSON 属性
- 运行提供的命令行参数
- 测试属性 @SpringBootTest
- 测试类 @TestPropertySource注解
- Devtools 设置的全属性
- 高
对于配置文件而言,在包内和在包外的优先级也不一样:从低到高,对于文件来说 properties 比 yaml 优先级高
- 低
- 1.jar包内的 application.properties
- 2.jar包内的 application-xxx.properties
- 3.jar包内的 config/application.properties
- 4.jar包内的 config/application-xxx.properties
- 5.jar包外的 application.properties
- 6.jar包外的 application-xxx.properties
- 7.jar包外的 config/application.properties
- 8.jar包外的 config/application-xxx.properties
- 9.jar包外的 config/xxx/application.properties
- 10.jar包外的 config/xxx/application-xxx.properties
- 高
优先级排序:命令行 > 包外 config/xxx/ > 包外 config > 包外 > 包内 config > 包内,profile > 非 prefile
共有 0 条评论