SpringBoot01
一.
创建一个简单的SpringBoot项目
①项目创建方式一:
使用Spring Initializr 的 Web页面创建项目
2、填写项目信息
3、点击”Generate Project“按钮生成项目;下载此项目
4、解压项目包,并用IDEA以Maven项目导入,一路下一步即可,直到项目导入完毕。
5、如果是第一次使用,可能速度会比较慢,包比较多、需要耐心等待一切就绪。
②
项目创建方式二:
使用 IDEA 直接创建项目
1、创建一个新项目
2、选择spring initalizr , 可以看到默认就是去官网的快速构建工具那里实现
3、填写项目信息
4、选择初始化的组件(初学勾选 Web 即可)
5、填写项目路径
6、等待项目构建成功
二.
项目目录结构
比较特殊的文件和文件夹
①.Idea存放项目的配置信息,包括历史记录,版本控制信息等。其实可以不用理它,也可以在IDEA里面设置隐藏它
②.mvn用来存放maven-wrapper.properties和相关jar包
③.gitignore是分布式版本控制系统git的配置文件,意为忽略提交
④.iml文件存的是项目的配置信息,可以不用管它,可以删掉,在运行的时候会自动重新创建它
⑤mvnw 全名是maven wrapper
它的原理是在maven-wrapper.properties文件中记录你要使用的maven版本,当用户执行mvnw clean 命令时,发现当前用户的maven版本和期望的版本不一致,那么就下载期望的版本,然后用期望的版本来执行mvn命令
⑥
mvn.cmd–执行mvnw命令的cmd入口
三.
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<!--web场景启动器-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<!--springboot单元测试-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<!--剔出依赖-->
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<!--打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
四.
编写一个http接口
1、在主程序的同级目录下,新建一个controller包,
一定要在同级目录下,否则识别不到
2、在包中新建一个DemoController类
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@RequestMapping("/demo")
public String demo(){
return "HelloWorld!!!";
}
}
3、编写完毕后,从主程序启动项目,浏览器发起请求,看页面返回;控制台输出了 Tomcat 访问的端口号!
五.
打成jar包
如果遇到报错,可以配置打包时 跳过项目运行测试用例
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!--跳过项目运行测试用例-->
<skipTests>true</skipTests>
</configuration>
</plugin>
如何更改项目端口号
在application.properties中加入
server.port=8081
七.
更改启动时显示的字符拼成的字母,SpringBoot呢?也就是 banner 图案;
只需一步:到项目下的 resources 目录下新建一个banner.txt 即可。
八.
SpringBoot配置文件
-
application.properties
-
语法结构:key=value
-
-
application.yaml (推荐使用)
-
语法结构:key:空格 value
-
九.
通过ymal给属性赋值
1.
创建Person和Dog实体类
@Data
@Component
public class Person {
private String name;
private Integer age;
private boolean happy;
private Date birth;
private Map<String,Object> map;
private List<String> list;
private Dog dog;
}
@Data
@Component
public class Dog {
private String name;
private Integer age;
}
application.yaml
person:
name: "hello"
age: 22
happy: false
birth: 2020/04/14
map: {k1: v1,k2: v2}
list:
- code
- music
dog:
name: "doge"
age: 10
2.
在Person类加上
@ConfigurationProperties
(
prefix
=
"person"
)注解
这时会报红,点击引导网站添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
3.
启动项目测试
可以获取到数据
Person(name=hello, age=22, happy=false, birth=Tue Apr 14 00:00:00 CST 2020, map={k1=v1, k2=v2}, list=[code, music], dog=Dog(name=doge, age=10))
4.
@ConfigurationProperties作用
将配置文件中配置的每一个属性的值,映射到这个组件中,告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定。
参数prefix:将配置文件中的所有属性一一对应
只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
5.
除了使用yaml还可以使用properties配置属性值
5.1
在resources目录下新建一个
person.properties
文件
name=zhangsan
5.2
然后在我们的代码中指定加载
person.properties
文件
@Data
@Component
@PropertySource(value = "classpath:person.properties")
public class Person {
@Value("name")
private String name;
......
}
输出结果:Person(name=name, age=null, happy=false, birth=null, map=null, list=null, dog=null)
如果遇到
properties配置文件在写中文的时候,有乱码 ,可以去IDEA中设置编码格式为UTF-8;
settings-->FileEncodings 中配置;
十.
配置文件占位符
person:
name: ${random.uuid} #随机数uuid
age: ${random.int} #随机数int
happy: false
birth: 2020/04/14
map: {k1: v1,k2: v2}
list:
- code
- music
dog:
name: ${abc:默认值}_旺财 #当这个abc是存在的时候赋值abc中的值,不存在赋值默认值
age: 10
输出结果:Person(name=1faa4cdc-5fcd-4428-9541-b54c425bbf81, age=-1856721532, happy=false, birth=Tue Apr 14 00:00:00 CST 2020, map={k1=v1, k2=v2}, list=[code, music], dog=Dog(name=默认值_旺财, age=10))
十一.
1.@ConfigurationProperties和@Value的区别
2.松散绑定
yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。
有点类似于之前学习Vue中ES6的驼峰写法
比如:在注册组件中使用了一个子组件叫做demoComponent,在<template></template>中引用子组件标签<demo-component/>
写个例子:
#application.yaml
person:
last-name: ${random.uuid} #随机数uuid
-------------------------------------------------------------------------------------------------
//Person.java
@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
......
}
输出结果:
Person(lastName=20b240a6-dd1a-4018-ab3b-e4dc54266dfe, age=1706709056, happy=false, birth=Tue Apr 14 00:00:00 CST 2020, map={k1=v1, k2=v2}, list=[code, music], dog=Dog(name=默认值_旺财, age=10))
3.
JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性。
Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。我们这里来写个注解让我们的name只能支持Email格式。
@Component //注册bean
@ConfigurationProperties(prefix = "person")
@Validated //数据校验
public class Person {
@Email(message="邮箱格式错误") //name必须是邮箱格式
private String name;
}
运行结果 :default message [不是一个合法的电子邮件地址];
4.
复杂类型封装,yml中可以封装对象 , 使用value就不支持