SpringBoot学习总结
SpringBoot简化spring开发,约定大于配置
优点:
- 快速创建独立运行的Spring项目以及与主流框架集成
- 使用嵌入式的Servlet容器,应用无需打成WAR包
- starters自动依赖与版本控制
- 大量的自动配置,简化开发,也可修改默认值
- 无需配置XML ,无代码生成,开箱即用
- 准生产环境的运行时应用监控
- 与云计算的天然集成
使用springboot也跟目前大时代背景有关,现在企业级应用如此庞大,集群,微服务,SOA词汇渐渐进入我们的视野
提到了微服务,我们就要看看马丁大叔的个人主页,马丁大叔14年提到了微服务,提倡服务之间应使用restful风格,后来我们将要学习的springcloud采用的就是基于restful风格的架构方案
开发springboot最好用的是IDEA,这是我的百度网盘链接,拿去用吧IDEA工具下载
配置文件
SpringBoot使用一个全局的配置文件,配置文件名是固定的
- application.yml
- application.properties
YAML是”YAML Ain’t a Markup Language”(YAML不是一种置标语言)的递归缩写
yml是一种标记语言,yml以数据为中心,相比于xml,xml花费太多的时间在标签上,效率不高
yml语法:
1、基本语法
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的1
2
3server:
port: 80
path: /test
2、值的写法
字面量
- 字符串默认不用加上单引号或者双引号
- 双引号不会转义特殊字符,例如:”spring \n boot” 输出则是 “spring”换行“boot”
- 单引号会转义特殊字符,例如:”spring \n boot” 输出则是 “spring \n boot”
对象
通常下面写法:1
2
3dog:
name: 阿黄
age: 12
也可以下面这种行内写法1
dog: {name: 阿黄,age: 12}
数组1
2
3
4pets:
- dog
- cat
- pig
它也有一个行内写法1
pets: [dog,cat,pig]
yml语法还支持占位符
- 随机数
age: ${random.uuid}
- 使用上面定义好的
1
2
3
4dog:
name: 阿黄
age: ${random.uuid}
nickname: 小${dog.name:狗狗}
狗狗
表示是如果加载不到dog.name,狗狗就是就是默认值
注:在yml中,last-name和lastName是表示的一样
从yml得到数据绑定给pojo
yml数据1
2
3person:
username: 旺财
password: 123
@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定,prefix=”person”配置文件中哪个下面的所有属性进行一一映射1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"person") (prefix =
public class Person {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}}
然后我们使用springboot的测试功能
```java
(SpringRunner.class)
public class HelloworldApplicationTests {
private Person person;
public void contextLoads() {
System.out.println(person.getUsername());
}
}
成功打印出: 旺财,成功绑定
这个用法是springboot中很多底层源码都会用的到,
源码摘取: redis属性和yml数据绑定,就是用的这个方法
ConfigurationProperties和Value的对比
@ConfigurationPropertie | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封 | 支持 | 不支持 |
在注解ConfigurationProperties的情况下在类上添加@Validated实现JSR303校验
@PropertySource和@ImportSource区别
由于我们使用ConfigurationProperties默认会从application.properties/yml中获取数据,所以,如果我们自己写了一个properties,我们则需要@PropertySource1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35package cn.itcast.helloworld.pojo;
import org.hibernate.validator.constraints.Length;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
"classpath:person.properties"}) (value = {
"person") (prefix =
public class Person {
8,max = 16) (min =
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
@ImportSource:导入spring的配置文件,让配置文件生效1
"classpath:beans.xml"}) (locations = {
profile
环境配置,在spring注解的时候有@Profile,和在学习注解版的时候作用是相同的,
有两种方法可以根据环境不同来实现配置文件不同
- application-dev.properties、application-prod.properties的方式
- 分区文档快,yml文件可以分区,如下,注意看红线
重要的知识点来了
如何激活环境
- 运行时配置环境 –spring.profiles.active=dev
- 项目打包好,我们在命令行可以使用 java jar test.jar –spring.profiles.active=dev
- 虚拟机参数 -Dspring.profiles.active=dev