文章目录
一、配置文件什么?
配置文件在一个项目中的作用是非常重要的,它可以帮助开发人员解决一些需要的变量和参数配置问题。
配置文件包括了很多项目所需的设置参数,例如数据库连接信息、日志文件输出路径、缓存处理方式和服务端口等。这些配置保存在文件中,通过读取和解析文件,应用程序能够快速的适配不同环境和平台,减少代码修改和发布复杂性。
总之,配置文件是非常重要的,它可以帮助开发人员更加简洁高效的编写代码,提高软件应用程序的可靠性和稳定性。
想象一下如果没有配置文件,那么SpringBoot项目就不能连接和操作数据库,甚至是不能保存用于排查问题的关键日志,配置文件的作用是至关重要的
二、配置文件格式
SpringBoot配置文件格式主要有两种:
1.properties
2.yml(yaml)
注意:
1.两个配置文件从功能上来讲是可以同时存在的,但是企业中通常会规定使用某一种格式的配置文件
2.如果两个格式的配置文件都存在,那么以properties为主
properties配置文件
properties配置文件是最早期的配置文件格式,也是创建SpringBoot项目默认的配置文件
基本语法:
properties是以键值的形式设置的,key,value之间是以=号连接的,例如:
# 配置项目端口号
server.port=8888
# 配置数据库url
spring.datasource.url="jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&useSSL=false"
# 配置数据库username
spring.datasource.name="root"
# 配置数据库password
spring.datasource.password="123456"
**读取配置文件: **
我们如果想要在项目中主动的读取配置文件中的内容,可以使用@Value注解来实现,@Value注解使用${}的格式读取:
@Component
public class UserController {
@Value("${server.port}")
private String port;
@PostConstruct
public void postConsrtuct() {
System.out.println("server.port: " + port);
}
}
我们也可以自定义配置项
# 自定义配置项
test = myProperties
properties优缺点分析:
优点:
1.系统默认的配置文件
2.properties配置项优先级比yml高
3.格式简单、不容易出错
缺点:
写法比较冗余
yml配置文件能够解决这个问题
yml配置文件
yml是YMAL(Yet Another Markup language)的缩写,翻译为另一种标记语言。yml可读性高,易于理解,可以简单表达数组,散列表等数据。
yml最大的优势: 可以跨语言,不止可以在Java中使用,还可以golang、python都可以使用yaml作为配置文件
基本语法:
yml是树型结构配置文件,基础语法是key : value,特别需要注意的是key和value之间需要使用英文冒号加空格,空格一定是不能省略的
# 配置数据库信息
spring:
datasource:
url: "jdbc:mysql://127.0.0.1:3306/zd?characterEncoding=utf8&useSSL=false"
username: "root"
password: "123456"
我们可以发现使用yml连接数据库冗余度要低
yml进阶使用
yml配置不同类型的数据类型及null
# 字符串
value: hello
# 布尔值
value: true
value: false
# 整数
value: 16
value: 0b1010_0111_0100_1010_1110 # 二进制
# 浮点数
value: 3.15
value: 3.15e-6
# Null使用null表示
value: ~
yml读取方式与properties一致,都是使用@Value注解,${}获取
@Component
public class UserController {
@Value("${hello}")
private String hello;
@Value("${bool}")
private boolean bool;
@Value("${flo}")
private float flo;
@PostConstruct
public void postConsrtuct() {
System.out.println("hello: " + hello);
System.out.println("bool: " + bool);
System.out.println("flo: " + flo);
}
}
当我们去获取配置中不存在的结果会报异常
注意事项:
如果我们的value值加了单双引号会有什么变化?
我们的字符串默认不用加单双引号,如果加英文的单双引号可以表示特殊的含义。
@Component
public class UserController {
@Value("${hello}")
private String hello;
@Value("${hello1}")
private String hello1;
@Value("${hello2}")
private String hello2;
@PostConstruct
public void postConsrtuct() {
System.out.println("hello: " + hello);
System.out.println("hello1: " + hello1);
System.out.println("hello2: " + hello2);
}
}
字符串默认是不加引号的。
单引号则会对字符串里面的特殊字符进行转义。比如,对于“/n”这种特殊字符,如果使用单引号进行包裹,则会以字符串形式输出“/n”,而不是进行换行符转义。
双引号不会对字符串里面的特殊字符进行转义,也就是转义字符该是什么意思就是什么意思。比如,“/n”表示换行符,将在输出时进行转义。
配置对象
我们配置对象在yml中有两种写法:
# 方法1
student:
name: zd
age: 19
# 方法2 行内写法
student: {name: zd,age: 19}
我们在获取配置中的对象时就不能使用@Value来读取了,要使用另一个注解@ConfigurationProperties来读取
@ConfigurationProperties("student")
@Component
@Date
public class StudentComponent {
private String name;
private int age;
}
//调用类
@Component
public class UserController {
@Autowired
private StudentComponent student;
@PostConstruct
public void postConsrtuct() {
System.out.println(student);
}
}
配置集合
配置日期:
@Component
public class UserController {
@Value("${mydate}")
private Date date;
@PostConstruct
public void postConsrtuct() {
System.out.println(date);
}
}
配置数组:
# 方式1:
subjects:
-pe
-english
-math
# 方式2
subjects: [pe,english,math]
@Component
public class UserController {
@Value("${subjects}")
private String[] subjects;
@PostConstruct
public void postConsrtuct() {
System.out.println(Arrays.toString(subjects));
}
}
配置map(Map<String,Object>):
maps: {k1: v1,k2: v2}
properties与yml的区别
1.properties是以key = value的形式配置的键值类型的配置文件,而yml使用的是类似于json格式的树型配置方式进行配置的,yml层级之间使用的是换行缩进的方式配置的,key和value之间使用 : 英文冒号加空格的方式设置的,空格不可省略
2.properties为早期并且默认的配置文件格式,但配置存在一定的冗余数据,使用yml可以很好的解决数据冗余问题
3.yml通用性更好,支持更多语言,如Java、Go、Python,如果是云开发,可以使用一份yml配置文件作为Java和Go的共同配置文件
4.yml和properties可以共存,但一个项目中建议使用统一的配置类型文件
设置不同环境的配置文件
SpringBoot不同平台的配置规则:
1.必须有主配置文件,主配置文件名必须是application.yml(.properties)
2.不同平台有不同的配置文件,配置文件的名称有要求 application-xxx.(yml、properties)
我们一般将公共的配置项放在主配置文件中
在application.yml中设置运行环境:
spring:
profiles:
active: dev