T04BF
👋专栏: 算法|JAVA|MySQL|C语言
🫵 今天你敲代码了吗
文章目录
-
- 5.SpringBoot配置文件
-
- [5.1 配置文件作用](#5.1 配置文件作用)
- [5.2 配置文件入手](#5.2 配置文件入手)
- [5.3 配置文件的格式](#5.3 配置文件的格式)
- [5.4 properties配置文件说明](#5.4 properties配置文件说明)
-
- [5.4.1 基本语法](#5.4.1 基本语法)
- [5.4.2 读取配置文件](#5.4.2 读取配置文件)
- [5.4.3 缺点](#5.4.3 缺点)
- [5.5 yml配置文件说明](#5.5 yml配置文件说明)
-
- [5.5.1 语法说明](#5.5.1 语法说明)
- [5.5.2 使用进阶](#5.5.2 使用进阶)
- [5.5.3 缺点](#5.5.3 缺点)
5.SpringBoot配置文件
5.1 配置文件作用
配置文件主要是用来解决硬编码带来的问题,把可能会发生改变的信息,放在用一个集中的地方,当我们启动某个程序的时候,应用程序从配置文件中读取数据,并加载运行
所谓"硬编码"是值,将数据直接嵌入到程序或其他可执行对象的源代码中,也就是将代码写死,就比如手机字体大小,如果采用硬编码的方式,就直接在程序中指定字体大小,所有的用户使用的都是同一个字体大小
但是实际上不同的用户有不同的选择,就可以将字体大小放在配置文件里面,当程序启动的时候,读取配置信息,以用户设置的字体大小来显示
SpringBoot配置文件
SpringBoot支持并定义了配置文件的格式,很多项目或者框架的的配置信息也放在配置文件里面,比如:
- 项目的启动端口
- 数据库的连接信息(如用户名和密码的设置)
- 第三方系统的调用密钥等信息
- 用于发现和定位的普通日志和异常日志等
5.2 配置文件入手
Spring内置的Tomcat服务器的默认端口是8080,但是如果8080端口号已经被其他进程使用了呢? 我们可以通过配置文件来修改服务器的端口号
SpringBoot在创建项目的时候,就已经帮我们创建了配置文件
我们尝试修改这个配置文件:
server.port=9090
此时显示的Tomcat启动的端口号就是9090了
5.3 配置文件的格式
Spring Boot的配置文件有以下三种格式:
- application.properties
- application.yml
- application.yaml
(实际上,yml是yaml的简写,使用方式一样)
当程序启动的时候,Spring Boot会自动从classpath路径找到并加载三种配置文件
存在多个配置文件
那么此时启动的端口号是多少??
可以看出,如果配置文件里面的内容有冲突,则以.properties为主,如果不冲突,则两个都起作用
5.4 properties配置文件说明
5.4.1 基本语法
properties是以键值对的形式配置的,key和value之间是以"="连接的.
properties
# 配置项目端口号
server.port=9090
# 配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?charsetEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
5.4.2 读取配置文件
使用 @value
注解来主动读取配置文件里面的内容
@value
注解使用${}
的格式读取
properties
# 配置信息
mykey.key1 = jwcb
java
@RestController
public class PropertiesController {
@Value("${mykey.key1}")
private String key1;
@RequestMapping("/getKey")
public String getKey() {
return "读到的值为" + key1;
}
}
访问结果为:
5.4.3 缺点
由于properties是以键值对的格式配置的,就会存有很很多的冗余的信息
5.5 yml配置文件说明
5.5.1 语法说明
yml是树形结构的配置文件,他的基础语法是"key:value"
key和value之间用冒号加空格的方式组成,空格不可省略
yaml
# 正确配置
key1: jwbc
# 错误配置
key2:jwbc
使用yml连接数据库
yaml
spring:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
username: root
password: root
5.5.2 使用进阶
配置不同数据类型及null
yaml
# 字符串
string:
value: Hello
# 布尔值
boolean:
value: true
# 整数
int:
value: 1
# 浮点数
float:
value: 1.1
# null(~代表null)
null:
value: ~
# 空字符串(直接什么都不跟也可以)
empty:
value: ''
读取
与properties类似,使用@value
即可
访问后得到:
** 如果value加上单双引号:**
yaml
# 字符串
string:
value1: Hello \n Hi
value2: 'Hello \n Hi'
value3: "Hello \n Hi"
java
@RestController
public class YmlController {
@Value("${string.value1}")
private String str1;
@Value("${string.value2}")
private String str2;
@Value("${string.value3}")
private String str3;
@RequestMapping("/getYml")
public void getYml() {
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
}
访问后结果为:
可以看出:
- 字符串默认不用加上单双引号
- 加上单引号后,会转义特殊字符
- 双引号不会转义特殊字符
配置对象
yaml
student:
id: 1
name: zhangsan
age: 18
此时读取的时候要通过@ConfigurationProperties
实现
java
@Component
@ConfigurationProperties(prefix = "student")//prefix即前缀的意思
@Data
public class Student {
private int id;
private String name;
private int age;
}
@RestController
public class YmlController {
@Autowired
private Student student;
@RequestMapping("getStudent")
public Student getStudent() {
return student;
}
}
访问后得到:
就是我们配置的数据
配置集合
yaml
studentlist:
name:
- zhangsan
- lisi
- wangwu
读取的时候也是通过@ConfigurationProperties
实现
java
@Configuration
@ConfigurationProperties("studentlist")
@Data
public class ListConfig {
private List<String> name;
}
@RestController
public class ListConfigController {
@Autowired
private ListConfig listConfig;
@RequestMapping("/getList")
public String getList() {
return listConfig.toString();
}
}
配置Map
yaml
mapexample:
map:
k1: k11
k2: k22
k3: k33
java
a
@Component
@ConfigurationProperties("mapexample")
public class MapConfig {
private HashMap<String,String> map;
}
@RestController
public class MapConfigController {
@Autowired
private MapConfig mapConfig;
@RequestMapping("/getMap")
public MapConfig getMap() {
return mapConfig;
}
}
5.5.3 缺点
不适合写复杂的配置文件
感谢您的访问!!期待您的关注!!!
T04BF
🫵 今天记得敲代码