配置⽂件
配置⽂件
1、配置⽂件
SpringBoot使⽤⼀个全局的配置⽂件,配置⽂件名是固定的;
·application.properties
·l
配置⽂件的作⽤:修改SpringBoot⾃动配置的默认值;SpringBoot在底层都给我们⾃动配置好;YAML(YAML Ain’t Markup Language)
YAML A Markup Language:是⼀个标记语⾔
YAML isn’t Markup Language:不是⼀个标记语⾔;
标记语⾔:
以前的配置⽂件;⼤多都使⽤的是 l⽂件;
YAML:以数据为中⼼,⽐json、xml等更适合做配置⽂件;
YAML:配置例⼦
server:
port:8081
XML:
<server>
<port>8081</port>
</server>
2、YAML语法:
1、基本语法
k:(空格)v:表⽰⼀对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的⼀列数据,都是同⼀个层级的
server:
port:8081
path: /hello
属性和值也是⼤⼩写敏感;
2、值的写法
字⾯量:普通的值(数字,字符串,布尔)
k: v:字⾯直接来写;
字符串默认不⽤加上单引号或者双引号;
“”:双引号;不会转义字符串⾥⾯的特殊字符;特殊字符会作为本⾝想表⽰的意思
name: “zhangsan \n lisi”:输出;zhangsan 换⾏ lisi怎样用表单大师制作新生查询
‘’:单引号;会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi 对象、Map(属性和值)(键值对):
k: v:在下⼀⾏来写对象的属性和值的关系;注意缩进对象还是k: v的⽅式
friends:
lastName: zhangsan
age:20
⾏内写法:
friends:{lastName: zhangsan,age:18}
数组(List、Set):
⽤- 值表⽰数组中的⼀个元素
pets:
-
cat
- dog
源计划丽桑卓- pig
⾏内写法
pets:[cat,dog,pig]
3、配置⽂件值注⼊
配置⽂件
person:
lastName: hello
age:18
boss:false
birth: 2017/12/12
maps:{k1: v1,k2:12}
lists:
- lisi
- zhaoliu
dog:
name:⼩狗
age:12
javaBean:
/**
* 将配置⽂件中配置的每⼀个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置⽂件中相关的配置进⾏绑定; *      prefix = "person":配置⽂件中哪个下⾯的所有属性进⾏⼀⼀映射
*
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
*
*/
@Component
@ConfigurationProperties(prefix ="person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
我们可以导⼊配置⽂件处理器,以后编写配置就有提⽰了
<!--导⼊配置⽂件处理器,配置⽂件进⾏绑定就会有提⽰-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
1、properties配置⽂件在idea中默认utf-8可能会乱码
调整
2、@Value获取值和@ConfigurationProperties获取值⽐较
@ConfigurationProperties@Value 功能批量注⼊配置⽂件中的属性⼀个个指定松散绑定(松散语法)⽀持不⽀持SpEL不⽀持⽀持JSR303数据校验⽀持不⽀持
复杂类型封装⽀持不⽀持配置⽂件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取⼀下配置⽂件中的某项值,使⽤@Value;
如果说,我们专门编写了⼀个javaBean来和配置⽂件进⾏映射,我们就直接使⽤@ConfigurationProperties;
3、配置⽂件注⼊值数据校验
@Component
@ConfigurationProperties(prefix ="person")
@Validated
public class Person {
/**
* <bean class="Person">
*      <property name="lastName" value="字⾯量/${key}从环境变量、配置⽂件中获取值/#{SpEL}"></property>
* <bean/>
*/
//lastName必须是邮箱格式
@Email
//@Value("${person.last-name}")
private String lastName;
//@Value("#{11*2}")
private Integer age;
//@Value("true")
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
4、@PropertySource&@ImportResource&@Bean
@PropertySource:加载指定的配置⽂件;
/**
* 将配置⽂件中配置的每⼀个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置⽂件中相关的配置进⾏绑定;
*      prefix = "person":配置⽂件中哪个下⾯的所有属性进⾏⼀⼀映射
*
exploit failed error code 31* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
*  @ConfigurationProperties(prefix = "person")默认从全局配置⽂件中获取值;
*
*/
@PropertySource(value ={"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix ="person")
//@Validated
public class Person {
/
**
* <bean class="Person">
*      <property name="lastName" value="字⾯量/${key}从环境变量、配置⽂件中获取值/#{SpEL}"></property>
* <bean/>
*/
//lastName必须是邮箱格式
// @Email
//@Value("${person.last-name}")
private String lastName;
xml文件什么软件打开
//@Value("#{11*2}")
private Integer age;
//@Value("true")
private Boolean boss;
@ImportResource:导⼊Spring的配置⽂件,让配置⽂件⾥⾯的内容⽣效;
Spring Boot⾥⾯没有Spring的配置⽂件,我们⾃⼰编写的配置⽂件,也不能⾃动识别;
想让Spring的配置⽂件⽣效,加载进来;@ImportResource标注在⼀个配置类上
@ImportResource(locations ={"l"})
导⼊Spring的配置⽂件让其⽣效
不来编写Spring的配置⽂件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xsi="/2001/XMLSchema-instance"
标记语言的含义
schemaLocation="/schema/beans /schema/beans/spring-beans.xsd">
<bean id="helloService"class="com.atguigu.springboot.service.HelloService"></bean>
</beans>
SpringBoot推荐给容器中添加组件的⽅式;推荐使⽤全注解的⽅式
properties是什么文件1、配置类**@Configuration**------>Spring配置⽂件
2、使⽤**@Bean**给容器中添加组件