|
JavaEE
Spring —— Bean 作用域和生命周期
Spring —— Spring Boot 创建和使用
目录
- Spring Boot 配置文件
- Spring Boot 配置文件格式
- properties配置文件
- properties 基本语法
- properties 缺点
- yml 配置文件
- yml 基本语法
- yml 配置不同类型数据及 null
- yml 配置对象
- yml 配置集合
- properties VS yml
- 设置不同环境的配置文件
Spring Boot 配置文件
如果没有配置信息, Spring Boot 项目就不能连接和此操作数据库, 甚至是不能保存可以用于排查问题的关键日志, 配置文件的作用是非常重要的.
- 系统使用的配置文件 (系统配置文件), 如端口号的配置, 链接数据库的配置
- 用户自定义配置文件
Spring Boot 配置文件格式
.properties
.yml (yaml)
# 注意事项 #
- 当一个项目中, 存在两种格式的配置文件, 并且两个配置文件间中设置了相同的配置项, 但之不同时.
.properties
配置文件的优先级最高, 但加载完 .properties 文件之后, 也会加载.yml
文件的配置信息. - 理论上讲
.properties
可以和.yml
共存, 但实际业务中, 我们通常会采用一种统一的配置文件格式, 这样可以更好的维护.
properties配置文件
properties 基本语法
#
properies 以键值的形式配置的: key=vaule
.
# 设置端口号
server.port=8888
#
我们还可以自定义配置项
myTest=gujiu
我们还可以读取配置项中的内容, 使用 @Value
注解来实现, @Value 注解使用 “${}”
的格式读取.
@Controller // 当前类为控制器
@ResponseBody // 返回的是数据, 而非页面
public class TestController {
@Value("${myTest}")
private String mytest;
@RequestMapping("/getconf")
public String getConfig() {
return mytest;
}
}
注:
不可以用 @Value(“myTest”) 读取, 其含义是, 将字符串赋值给 mytest 变量.
properties 缺点
当我们想配置数据库的时候.
# 连接数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
从上述配置 key
中可以看出, properties
配置文件中会有很多的冗余信息.
想要解决这个问题,就可以使用 yml
配置⽂件的格式化了.
yml 配置文件
yml (YAML - Yet Another Markup Language) 翻译成中文 “另一种标记语言”
yml 优点
yml
是一个可读性高, 写法简单, 易于理解, 他的语法和JSON
语言类似.yml
支持更多的数据类型, 它可以简单表达清单 (数组), 散列表, 标量等数据形态, 它使用空白符号缩进和大量依赖外观的特色, 特别时候来表达或编辑数据结构, 各种配置文件等.yml
支持更多的编程语言, 它不只是Java
中可以使用在 Golang, PHP, Python, Ruby, JavaScripy, Perl 中.
yml 基本语法
yml 是树形结构的配置文件: key: vaule
.
# 注意 #
key 和 vaule 直接使用英文冒号加空格的方式组成, 空格不可省略.
# 配置端口
server:
port: 6666
# 自定义配置
mytest2: gugu
同样是使用 @Value 注解使用 “${}”
的格式读取.
@Controller // 当前类为控制器
@ResponseBody // 返回的是数据, 而非页面
public class TestController {
@Value("${mytest2}")
private String myTest;
@RequestMapping("/getconf2")
public String getConfig2() {
return myTest;
}
}
当我们配置数据库连接
# 配置数据库连接
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
username: root
password: 123456
yml 配置不同类型数据及 null
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null,~代表null
null.value: ~
注意事项:value 值加单双引号
# 字符串
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."
读取一下, str1, str2, str3.
@Controller // 当前类为控制器
@ResponseBody // 返回的是数据, 而非页面
public class TestController {
@Value("${str1}")
private String str1;
@Value("${str2}")
private String str2;
@Value("${str3}")
private String str3;
@PostConstruct
public void postConstruct() {
System.out.println("str1: " + str1);
System.out.println("str2: " + str2);
System.out.println("str3: " + str3);
}
}
运行结果展示:
# 注意事项 #
- 字符串默认不⽤加上单引号或者双引号.
- 单引号会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据.
- 双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思.
yml 配置对象
比如: 我们配置一个学生对象
student:
id: 1
name: Gujiu
age: 18
或者使用行内写法
student: {id: 1,name: Gujiu,age: 18}
读取配置对象
这个时候就不能用 @Value 来读取配置中的对象了,此时要使用另⼀个注解 @ConfigurationProperties
来读取
#
首先要创建一个实体类:
@Component
@ConfigurationProperties(value = "student")
@Data
public class Student {
private int id;
private String name;
private int age;
}
#
调用类代码
@Controller // 当前类为控制器
@ResponseBody // 返回的是数据, 而非页面
public class TestController {
@Autowired
private Student student;
@PostConstruct
public void postConstruct() {
System.out.println(student);
}
}
//运行结果: Student(id=1, name=Gujiu, age=18)
yml 配置集合
配置文件也可以配置 list
集合
mynames:
name:
- Gujiu
- GUJIU
- gugu
或者使用行内写法
mynames: {name: [Gujiu,GUJIU,gugu]}
读取配置对象
和读取对象一样, 使用 @ConfigurationProperties
来读取
@Component
@ConfigurationProperties("mynames")
@Data
public class ListConfig {
private List<String> name;
}
properties VS yml
- 二者都是
Spring Boot
的配置文件, 二者的诞生时间是不同的.properties
是默认的配置文件, 诞生的比较早.yml
是后来才出现的另一种标记语言的配置文件. - properties 是以
key=vaule
的形式配置的键值类型的配置文件, 而 yml 使用的类似JSON
格式的树形配置方式进行配置的. yml 层级之间使用换行缩进的方式配置,key 和 value 之间使用 “: ” 英文冒号加空格的方式设置,并且空格不可省略. properties
为早期并且默认的配置文件格式,但其配置存在⼀定的冗余数据,使⽤yml
可以很好的解决数据冗余的问题yml
通用性更好, 支持更多语言,如 Java、Go、Python 等,如果是云服务器开发,可以使用一份配置⽂件作为 Java 和 Go 的共同配置文件.yml
功能比较强大, 支持更多的数据类型, 对中文的兼容性非常好.
设置不同环境的配置文件
-
创建不同环境的配置文件:
- application-dev.yml (开发环境)
- application-prod.yml (生产环境)
- …
-
在
application.yml
中设置运行环境:# 开发环境 spring: profiles: active: dev
# 生产环境 spring: profiles: active: prod
|
以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!