SpringBoot基础配置
注意:默认都是先读取application.properties文件中的配置的。(即如果application.properties文件中有相对应的配置的话,就直接读取其中的。别的文件不会进行读取覆盖)
配置文件,分为 properties 和 yaml / yml
- yaml 配置是有序的,properties配置是无序的,
- 自定义的yaml目前暂时不支持使用注解直接注入到SpringBoot项目中。也就是只能使用
application.yaml
2.1 配置文件值注入
1.使用@ConfigurationProperties方式获取
类型安全注入
配置文件, application.yaml
1 | stu: |
JavaBean
1 | /** |
测试结果:(转为了JSON)
1 | { |
我们可以导入配置文件处理器,以后编写配置文件就有提示了.没生效时,重新编译一下项目。
1 | <dependency> |
读取properties文件中获取中文时,如果出现了中文乱码,则需要进行相应的设置
2.只用@Value进行获取
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定 | 支持(lastName与last-name) | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复制类型封装(map) | 支持 | 不支持 |
复杂类型封装不支持map但是支持list
配置文件yml与properties文件它们都能获得到值;
如果只是在某个业务逻辑中需要获得以下配置文件中的某项值,使用@Value
如果专门编写了一个javabean来和配置文件进行映射,我们就直接使用@ConfigurationProperties
3.配置文件数据校验
1 | /** |
4.@PropertySource&@ImportResource
@PropertySource:加载指定的配置文件;
person.properties文件
1 | 李四 = |
person
1 | "person") (prefix = |
通过使用@PropertySource注解来指定配置文件,通过@ConfigurationProperties的prefix属性来指定前缀
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效
SpringBoot里面没有spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来,@ImportResource标注在一个配置类上。
1 | "classpath:beans.xml"})//导入Spring的配置文件 (locations = { |
但是SpringBoot不推荐这样使用。
1 | <bean id="helloService" class="com.ooyao.springboot.service.HelloService"></bean> |
SpringBoot推荐给容器添加组件的方式:推荐使用全注解的方式
1.配置类===配置文件
2.使用@Bean给容器添加组件
使用@Configuration注解来标注一个配置类。用@Bean注解来标志一个组件。
1 |
|
2.2 配置文件占位符
1.随机数
1 | ${random.value} |
2.占位符
1 | 张三${random.uuid} = |
2.3 Profile
Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活,指定参数等方式快速切换环境。
1.多profile文件形式,
格式:application-{profile}.properties/yml:application-dev.properties,application-prod.properties
1 | test = |
可以采用 properties文件或是 yaml 文件类型。 分别以 dev
test
prod
来代表三种不通的环境,将相应环境的配置信息放在相应的配置文件中。如果在三个配置文件中存在相同的配置信息,则可以统一放在application.yaml
或 application.properties
文件中。
2.多profile文档块模式
1 | server: |
上面最终监听的端口号是8088
使用spring.profiles来指定文档块的属性,使用spring.profiles.active指定读取哪个文档块
3.激活方式
-命令行:–spring.profiles.active=prod
-配置文件 spring.profiles.active=dev
1 | dev/prod = |
-jvm参数 -Dspring.profiles.active=dev
2.4配置文件加载位置
springboot启动会扫描以下位置的application.properties/yml文件作为springboot的默认配置文件
1 | -file:./config/ 当前项目的文件路径的config目录下 [1] |
以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容
如下图示
我们也可以通过配置spring.config.location来改变默认配置
1 | 在项目启动的时候可以指定配置文件的路径。使用下列命令。 |
项目打包好之后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置,指定配置文件和默认加载的这些配置文件会共同起作用,形成互补配置。
2.5外部配置加载顺序
1.命令行参数
所有的配置都可以在命令行上进行指定
1 | java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc |
多个配置用空格分开; –配置项=值
2.来自java:comp/env的JNDI属性
3.Java系统属性(System.getProperties())
4.操作系统环境变量
5.RandomValuePropertySource配置的random.*属性值
由jar包外向jar包内进行寻找;
优先加载带profile
6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
再来加载不带profile
8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件
9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件
10.@Configuration注解类上的@PropertySource
11.通过SpringApplication.setDefaultProperties指定的默认属性
所有支持的配置加载来源;