SpringBoot配置
配置文件
SpringBoot使用一个全局的配置文件,配置文件名是固定的;
•application.properties
•application.yml
二者选一个
全局配置文件的位置:src/main/resources
配置文件的作用:修改SpringBoot自动配置的默认值
配置文件加载位置
spring boot 启动会扫描以下位置的application.properties或者
application.yml文件作为Spring boot的默认配置文件
从上到下优先级从高到低:
-
file:./config/
-
file:./
当前项目的根目录下
-
classpath:/config/
-
classpath:/ 默认
默认:类路径下的application.properties
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置;
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默
认加载的这些配置文件共同起作用形成互补配置;
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties
外部配置加载顺序
除了上面的配置文件,SpringBoot还可以从很多别的地方加载配置;官方列出了17种,下面主要说一下主要的几个:
- 命令行参数
所有的配置都可以在命令行上进行指定
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc
- jar包外 和jar内的
配置文件占位符
可以在配置文件中用占位符
- 随机数
${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}
- 占位符获取之前配置的值,如果没有可以是用:指定默认值
person.last‐name=张三${random.uuid}
person.dog.name=${person.last‐name}_dog
person.dog.name=${person.hello:hello}_dog
配置文件注入
配置文件的属性和类的属性绑定
@ConfigurationProperties
@ConfigurationProperties: 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
- prefix = “person”:指定前缀,也就是只加载配置文件中前缀是这个的到当前类
注意:只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;也就是要加@component
例子:
用之前要导入配置文件处理器,在pom.xml(可能之前的版本要,现在不用了)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐configuration‐processor</artifactId>
<optional>true</optional>
</dependency>
@Value
@ConfigurationProperties 和@Value 比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
-
松散绑定:就是支持驼峰命名
-
SpEL
-
JSR303数据校验
类上加@Validated注解 就加入了JSR303数据校验
@ConfigurationProperties 才支持,@Value不支持
-
复杂类型封装
例如配置文件中的这种@ConfigurationProperties 是可以解析的
@PropertySource:加载指定路径下的配置文件
当我们的属性不在全局配置文件,我们写在了别的地方 ,那就需要用
@PropertySource 注解加载指定的配置文件
@PropertySource(value = {"classpath:person.properties"})
public class Person {
@ImportResource 导入Spring的配置文件
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上
@ImportResource(locations = {"classpath:beans.xml"})
但SpringBoot 不推荐通过Spring的配置文件来添加组件
SpringBoot推荐用配置类的方式
@Configuration//指明当前类是一个配置类,替代之前的Spring配置文件
public class MyAppConfig {
//将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名
@Bean
public HelloService helloService(){
return new HelloService();
}
}
Profile 不同配置切换
Profile是Spring对不同环境提供不同配置功能的支持
当我们有不同环境下用的配置文件时,比如开发环境、测试环境、发布后的环境等,我们就需要用配置切换
可以用多profile 文件形式也可以用多profile文档块
- 多profile文件形式
我们在主配置文件编写的时候,文件名可以是application-{profile}.properties/yml
默认用application.properties的配置
当在application.properties中指定spring.profiles.active=dev
则用的是application-dev.properties/yml
- yaml多profile文档块
用---
分隔不同的配置server: port: 8081 spring: profiles: active: prod #指定使用哪个环境 ‐‐‐ server: port: 8083 spring: profiles: dev ‐‐‐ server: port: 8084 spring: profiles: prod #指定属于哪个环境
激活方式
- 在配置文件中指定
spring.profiles.active=dev
- 命令行
可以在
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
也可以在IDEA直接写
- 虚拟机参数
-Dspring.profiles.active=dev