Spring Boot学习笔记(2)——SpringBoot核心配置(yml/properties 文件)

SpringBoot的配置文件

1、Spring Boot 使用一个全局配置文件,放置在 src/main/resources 目录或 类路径的 /config 下,命名固定,为:
application.properties 或者 application.yml
2、配置文件的作用:修改 Spring Boot 自动配置的默认值,例如:修改springboot项目的启动的默认端口:
application.properties文件中:

server.port=8088

application.yml文件中:

#修改springboot项目启动的默认端口号,也可以在 application.yml 文件中修改,当 properties文件和yml文件同时存在时,优先起效果的时properties文件中的配置
server:
  port: 8089

3、yml不是一个标记语言,标记语言是spring以前的配置文件,大多是xxxx.xml,yml使用的是YAML,以数据为中心,配置数据的时候具有面向对象的特征;比 json、xml 等更适合做配置文件

YAML语法格式

1、使用key: value的形式来表示一组键值对(注意:冒号后面必须要有空格
2、使用空格缩进来表示层级关系,并且缩进的空格数不重要,但是同一层级下的元素,缩进的空格数必须一直
3、key和value的书写大小写敏感
4、YMAL常用写法:
1)、value可以是数值,字符串,布尔,日期,对象…
2)、当value是字符串时,默认不需要加上引号,但是如果value中有特殊字符,则需要加上双引号,如:name: “mengxuegu \n jiaoyu” 输出: mengxuegu 换行 jiaoyu
name: 'mengxuegu \n jiaoyu 输出: mengxuegu \n jiaoyu
3)、yml文件定义对象:

emp:
	lastName: xiaomeng
	age: 22
	salary: 10000
#或者
emp: {lastName: xiaomeng, age: 22, salary: 10000}

4)、yml文件定义list

fortes:
	- java
	- python
	- hadoop
#或者
fortes: [java, python, hadoop]
yaml 配置文件向javaBean注入值

1、编写javaBean

public class Forte {

	private String name;
	private Integer time;
	
	getter/setter……
}

/**
 * 1、@Component 表示将当前类作为一个sping的组件,提供给spring使用
 * 2、@ConfigurationProperties 告诉springboot,将  properties/yml 配置文件中的对应属性的值,映射到这个组件类中,与类中的属性进行一一绑定
 * 		prefix = "emp"  表示将配置文件中 前缀明为 emp 的属性来与这个类中进行映射
 * @author asong
 *
 */
@Component
@ConfigurationProperties(prefix = "emp")
public class Emp {

	private String lastName;
	private Integer age;
	private Double salary;
	private Boolean boss;
	private Date birthday;

	private Map<String, Object> map;
	private List<String> list;

	private Forte forte;

	private List<Forte> forteList;

	getter/setter……
}

2、编写application.yml文件(注意同一级元素左侧缩进的空格数相同

emp:
  lastName: 张三
  age: 28
  salary: 20000
  boss: true
  birthday: 1991/1/1
  map: 
    key1: value1
    key2: value2
  list:
    - one
    - two
    - three
  forte:
    name: java
    time: 8
  forteList:
    - name: python
      time: 3
    - name: C++
      time: 4

3、使用application.properties文件注入值(与第2点功能一样,只需一个即可

#\u674E\u56DB:李四
emp.lastName=\u674E\u56DB
emp.age=30
emp.salary=10000
emp.boss=false
emp.birthday=2000/10/10
emp.map.key1=value1
emp.map.key2=value2
emp.list=1,2,3
emp.forte.name=java
emp.forte.time=10
emp.forteList[0].name=phthon
emp.forteList[0].time=10
emp.forteList[1].name=C++
emp.forteList[1].time=20

4、使用springboot的单元测试,运行即可发现Emp 对象中的各个属性注入了配置文件中配置的值

使用@Value注解向JavaBean注入值

1、可以使用spring的@Value注解向类中的属性注入配置文件中的值

@Value("${emp.last-name}")
private String lastName;
@Value("#{10*2}")
private Integer age;
@Value("8000")
private Double salary;

2、@Value注解和@ConfigurationProperties注解功能有异同,具体如下:
在这里插入图片描述
3、JSR303数据校验_配置文件注入的值,例如:
校验是否为合法的邮箱地址:
1)、在Emp类上加上一个 @Validated 注解
2)、在listName属性上添加 @Email 注解,表示对注入的lastName的值进行email的校验,看是符合邮箱的格式
3)、当使用 @ConfigurationProperties(prefix = “emp”) 注解来注入值时,测试项目会报错,因为从配置文件中注入的lastName的值不符合邮箱格式
4)、当使用@Value注解时,测试项目不会报错

4、@ConfigurationProperties 和 @Value 的各自使用场景:
如果只是在某个业务逻辑中需要获取配置文件中的某个属性值,就使用 @Value
如果专门使用javaBean和配置文件进行映射,就使用 @ConfigurationProperties

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章