一、配置文件
springBoot中有两种配置文件
•application.properties
•application.yml
YAML:是以数据为中心,比json、xml等更适合做配置文件。
YAML:配置例子:
server:
port: 8888
如果一个项目中有.properties和yml两种配置文件,这两个配置文件互为补充。
二、YAML基本语法
K:(空格) v : 表示一对键值对。 (空格必须要有)
用空格的缩进来控制其级别关系;只要是左对齐的一列数据,都是同一个层级的。
eg:
server:
port: 8888
servlet:
context-path: /hl
三、yaml中值的书写:
如上述的那个例子。
字符串默认不加单引号或者双引号 ;
“”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi
‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
四、yml配置文件对象注入javaBean中
eg: yml配置如下:
person:
lastName: HL
age: 23
boss: false
birth: Yyyyy/MM/dd
maps: {key1: value1, key2: value2}
lists: [lisi,zhangshan]
dog:
name: 小狗
age: ${person.age} //其中可以用el表达式可以该对象的值。
javaBean的属性为:
@Component
@ConfigurationProperties(prefix = "person")
public class person {
String lastName;
String age;
boolean boss;
Date birth;
Map<String,String> maps;
List<String> lists;
Dog dog;
....
}
其中Dog对象只需要加@Component,将其纳入springboot容器管理。
@Component是注解将其加入到springboot容器中。
@ConfigurationProperties(prefix = “person”)是读取yml配置文件,其中prefix是前缀。
之后,springboot会自动的为我们注入值。
=========================================================
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
=========================================================
四、application配置文件对象注入javaBean中
appilcation配置文件如下:
person.age=20
person.birth=2020/1/1
person.boss=false
person.dog.name=林
person.dog.age=22
person.last-name=hl
person.lists=dog,cat,morse
person.maps.key1=value1
person.maps.key2=value2
五、读取application的两种方式
- @ConfigurationProperties(prefix = “person”)
- @value("${所取的值}")
JSR303数据校验时,需要加入注解@Validated
-
@value 单个值的注入,也可以对其进行计算(即为spel)并且@不支持复杂类型的封装,如map,list
eg:@Value("${person.birth}") Date birth; ------------SpEL-------------------- @Value("#{11*2}") private Integer age; -----------下面会报错--------------------- @Value("${person.maps}") Map<String,String> maps;
@PropertySource
加载指定的文件,上面的两个是加载默认的文件配置,@PropertySource是加载指定文件的配置。
eg:
//需要指定文件的位置,以及需要加载的前缀
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {
******
}
@bean
需要配合类@Configuration==========》spring配置文件
使用@Bean给容器添加组件
/**
* @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
*加上@Configuration该注解之后,该类代表是spring IOC容器
* 在配置文件中用<bean><bean/>标签添加组件
* */
@Configuration
public class JavaConfig1 {
//将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
@Bean("BWM")
public Car getBWM(){
System.out.println("配置类@Bean给容器中添加组件了...");
return new BWM();
}
}
多Profile开发
如果spring boot需要多个profile文件,(默认加载application.properties)需要在默认application中指定要加载的文档,其中加载的代码为: spring.profiles.active=pro。
并且命名的profile的规则为 :application-{profile}.properties/yml
eg:
配置文件加载的优先级
–file:./config/ (根目录下的config文件夹最高)
–file:./ (根目录下的config次之)
–classpath:/config/ (resource文件夹下的config文件夹第三)
–classpath:/ (resource文件夹下最低)
注意: 优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置;