茂展的分享博客

Spring琐碎知识汇总

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
3
server:
port: 80
path: /test

2、值的写法

字面量

  • 字符串默认不用加上单引号或者双引号
  • 双引号不会转义特殊字符,例如:”spring \n boot” 输出则是 “spring”换行“boot”
  • 单引号会转义特殊字符,例如:”spring \n boot” 输出则是 “spring \n boot”

对象

通常下面写法:

1
2
3
dog:
name: 阿黄
age: 12

也可以下面这种行内写法

1
dog: {name: 阿黄,age: 12}

数组

1
2
3
4
pets: 
- dog
- cat
- pig

它也有一个行内写法

1
pets: [dog,cat,pig]

yml语法还支持占位符

  1. 随机数 age: ${random.uuid}
  2. 使用上面定义好的
    1
    2
    3
    4
    dog:
    name: 阿黄
    age: ${random.uuid}
    nickname: 小${dog.name:狗狗}

狗狗表示是如果加载不到dog.name,狗狗就是就是默认值

注:在yml中,last-name和lastName是表示的一样

从yml得到数据绑定给pojo

yml数据

1
2
3
person:
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
@Component                                             
@ConfigurationProperties(prefix = "person")
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
@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloworldApplicationTests {

@Autowired
private Person person;

@Test
public void contextLoads() {
System.out.println(person.getUsername());
}

}

成功打印出: 旺财,成功绑定

这个用法是springboot中很多底层源码都会用的到,
源码摘取: redis属性和yml数据绑定,就是用的这个方法

ConfigurationProperties

ConfigurationProperties和Value的对比

@ConfigurationPropertie @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封 支持 不支持

在注解ConfigurationProperties的情况下在类上添加@Validated实现JSR303校验

jsr303_length

@PropertySource和@ImportSource区别

由于我们使用ConfigurationProperties默认会从application.properties/yml中获取数据,所以,如果我们自己写了一个properties,我们则需要@PropertySource

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
package 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;

@Component
@PropertySource(value = {"classpath:person.properties"})
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

@Length(min = 8,max = 16)
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
@ImportResource(locations = {"classpath:beans.xml"})

profile

环境配置,在spring注解的时候有@Profile,和在学习注解版的时候作用是相同的,
有两种方法可以根据环境不同来实现配置文件不同

  • application-dev.properties、application-prod.properties的方式
  • 分区文档快,yml文件可以分区,如下,注意看红线
    profile

重要的知识点来了

如何激活环境

  1. 运行时配置环境 –spring.profiles.active=dev
  2. 项目打包好,我们在命令行可以使用 java jar test.jar –spring.profiles.active=dev
  3. 虚拟机参数 -Dspring.profiles.active=dev
------本文结束感谢阅读------
🐶 您的支持将鼓励我继续创作 🐶