1、创建项目时选择 Spring Initializr
2、完善项目信息
! 出现 Artifact contains illegal characters 是因为Artifact
中使用了大写,只能是全小写,单词之间用-
分隔
Eclipse
1、需要安装插件,或者使用STS版本
2、创建项目时选择Spring Starter Project
4、选择需要的starter
默认生成的Spring Boot项目
resources
文件夹中目录结构
static
:保存所有的静态资源; js、css、images;templates
:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认
不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);application.properties
:Spring Boot应用的配置文件;可以修改一些默认设置;SpringBoot 使用了一个全局的配置文件,配置文件名 application 是固定的
配置文件的作用:修改SpringBoot 自动配置的默认值;SpringBoot 在底层都给我们自动配置好。
YAML(YAML Ain't Markup Language)
YAML A Markup Language:是一个标记语言
YAML isn't Markup Language:不是一个标记语言;
标记语言:
以前的配置文件;大多都使用的是 xxxx.xml文件;
YAML:以数据为中心,比json、xml等更适合做配置文件;
以空格
的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
次等级的前面是空格,不能使用制表符(tab)
冒号之后如果有值,那么冒号和值之间至少有一个空格,不能紧贴着你
k: v
字符串默认不用加上单引号或者双引号;
""
:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
eg: name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
''
:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
eg: name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
k: v
在下一行来写对象的属性和值的关系;注意缩进
1、
person:
name: 张三
gender: 男
age: 22
行内写法
person: {name: 张三,gender: 男,age: 22}
1、
fruits:
- 苹果
- 桃子
- 香蕉
行内写法
fruits: [苹果,桃子,香蕉]
public class Pet {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Pets{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
/**
* @Author cloudlandboy
* @Date 2019/11/13 下午8:06
* @Since 1.0.0
* 将配置文件中配置的每一个属性的值,映射到这个组件中
*
* ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Character gender;
private Integer age;
private boolean boss;
private Date birth;
private Map maps;
private List
需要导入配置文件处理器,以后编写配置就有提示了
org.springframework.boot
spring-boot-configuration-processor
true
person:
name: 张三
gender: 男
age: 36
boss: true
birth: 1982/10/1
maps: {k1: v1,k2: v2}
lists:
- apple
- peach
- banana
pet:
name: 小狗
age: 12
package cn.clboy.helloworldquickstart;
import cn.clboy.helloworldquickstart.model.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class HelloworldquickstartApplicationTests {
@Autowired
private Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
上面yaml对应的properties配置文件写法、
person.name=李四
person.age=34
person.birth=1986/09/12
person.boss=true
person.gender=女
person.lists=cat,dog,pig
person.maps.k1=v1
person.maps.k2=v2
person.pet.name="小黑"
person.pet.age=10
!测试,发现中文会乱码,而且char类型还会抛出Failed to bind properties under 'person.gender' to java.lang.Character异常
在设置中找到File Encodings
,将配置文件字符集改为UTF-8
,并勾选:
Transparent native-to-ascii conversion
!yaml和properties配置文件同时存在,properties配置文件的内容会覆盖yaml配置文件的内容
配置文件值注入有两种方式,一个是Spring Boot的@ConfigurationProperties
注解,另一个是spring原先的@value
注解
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
松散绑定:例如Person中有lastName
属性,在配置文件中可以写成 lastName
或lastname
或last-name
或last_name
等等
SpEL:
## properties配置文件
persion.age=#{2019-1986+1}
# Person类
#--------------------使用@ConfigurationProperties注解,会抛出异常--------------------
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private Integer age;
#--------------------使用@value注解 OK--------------------
@Component
public class Person {
@Value("${person.age}")
private Integer age;
https://note.clboy.cn/#/backend/springboot/properties?id=%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6%e5%80%bc%e6%b3%a8%e5%85%a5%e4%b8%a4%e7%a7%8d%e6%96%b9%e5%bc%8f%e5%af%b9%e6%af%94
https://niceseason.github.io/2020/04/18/springboot/