配置的知识点分为三部分。
第一部分,介绍加载配置项。
第二部分,介绍具体的配置项。
第三部分,介绍配置的方式。
1、加载
1.1 来源 & 顺序
加载的来源如下,若存在相同变量,靠后的会覆盖靠前的。
1. SpringApplication.setDefaultProperties与 SpringBootBuilder.properties
Spring系统的环境变量,类似于JVM设置环境变量。
2. @PropertySource
配置类中引入的properties文件,通常不适用,因为配置文件过多,维护起来越困难。
3. application.properties或者 application-{profile}.properties
应用的配置文件,或者是某个特定环境独有的配置文件,常见的环境有dev开发,test测试,prod生产。
4. RandomValuePropertySource
它是自动加载的,是生成随机数的工具类,示例如下:
my.secret=${random.value} my.number=${random.int} my.bignumber=${random.long} my.uuid=${random.uuid} my.number.less.than.ten=${random.int(10)} my.number.in.range=${random.int[1024,65536]}
5. OS变量,JVM变量
操作系统的环境变量,JVM的环境变量。
6. ServletContext, ServletConfig(不推荐)
ServletContext上下文对象,以及它的配置类,通常都是web程序,都适用。
7. spring_application_json, Command line args(不推荐)
命令行参数,单个的key,value对,批量的JSON串。只适用于从命令行启动spring boot项目的场景。
8. @TestPropertySource & @SpringBootTest(不推荐)
加载测试的配置文件,只适用于测试类,
9. devtools global settings properties(不推荐)
devtools启用之后,会加载一些默认的配置项,但是通常在生产环境下不使用该工具。
1.2 profile
Profile指针对不同场景加载不同的配置文件,此时配置文件的名称默认为application-{profile}.properties。
使用Profile有两个步骤,
- 创建application-{profile}.properties文件,本示例中创建application-test和application-production
- 激活profile。
激活profile的方式有三种
- 第一种设置spring.profiles.active变量,通常在application.properties中设置。
- 第二种方式在启动类上添加@ActiveProfiles注解
- 第三种方式调用SpringBootBuilder的profiles方法。
2、配置项
2.1 spring.main
spring: main: lazy-initialization: true # 延迟加载 # 注入bean时,若同名bean已存在,则覆盖,默认情况下会报错 allow-bean-definition-overriding: true web-application-type: servlet # web应用程序的类型,通常为servlet banner-mode: console # banner的模式,通常为console, # 注册关闭时的钩子,即关闭程序时,执行一段自定义代码,类似于前端的事件。 register-shutdown-hook: true
2.2 Banner
Banner的知识点分为两个部分,配置项,类型
配置项:
-- 可选值三种,off禁用,console(控制台),LOG(日志文件) spring.main.banner-mode=off spring: banner: charset: UTF-8 # 字符集 location: classpath:banner.txt # banner的路径 image: # 此时banner类型为ImageBanner location: classpath:banner.gif # 图片路径 76 # 宽度 height: 100 # 高度 margin: 2 # 边距 invert: false # 是否启用暗黑模式 bitdepth: 4 # bit位数 pixelmode: text # 像素 px模式
类型:
SpringBootBanner:默认的方式,输出Spring boot横幅
ResourceBanner:由资源文件提供Banner的内容
ImageBanner:Banner的内容为图片。
自定义Banner: Banner的内容为自定义的内容。
第一步,实现Banner接口
/** * 自定义Banner,输出一条message */ public class MessageBanner implements Banner { // 自定义消息 private String message; public MessageBanner(String message) { this.message = message; } @Override public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) { out.print(this.message); } }
第二步,配置Banner。
builder.banner(new MessageBanner("\n This IS MY OWN TEST BANNER!\n"));
第三步,验证。略。
链接:
http://patorjk.com/software/taag/,
http://www.network-science.de/ascii/
3、配置方式
大类分为两种,程序方式,配置文件方式。
3.1 程序方式
第一种方式,调用SpringApplication对象的setXX方法。
SpringApplication application = new SpringApplication(MyApplication.class); application.setBannerMode(Banner.Mode.OFF);
第二种方式,调用SpringApplicationBuilder的方法。
new SpringApplicationBuilder() .sources(Parent.class) .child(Application.class) .bannerMode(Banner.Mode.OFF) .run(args);
3.2 文件方式
XML方式,老古董了,略。
properties方式,没有提示,而且配置项过多时,不方便阅读,略。
yaml方式,有提示,而且很方便。