SpringBoot配置文件
配置文件的作用
整个项目中重要的数据信息都在配置文件中进行配置:
- 数据库连接信息(url,用户名,密码)
- 程序启动端口
- 用于发现问题和定位问题的项目运行的普通日志和异常日志
- 第三方系统调用的秘钥
可以知道我们的配置文件在SpringBoot项目中十分重要,没有配置信息就不能进行数据库连接操作,也缺少了项目排查的日志信息,而且SpringBoot约定大于配置,所以日志信息十分重要!
配置文件格式
.properties
.yml
我们的
application
配置文件也是SpringBoot项目默认的配置文件!
也是久之前老款的配置文件,而yml
配置文件是新款的配置文件,通用性更强!
同一个项目可以使用这两种格式的配置文件! 但是我们的一般会统一配置格式!还有就是application
格式的配置文件优先级更高,当我们一个配置信息在这2个格式的配置文件都进行配置后,application
优先!
properties配置文件
基本语法
采用
key = val
键值对的形式 !
键和值间通过=
连接,
键值对之间通过换行分割
# 配置项目端口号
server.port=8084
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
我们properties
格式的文件是通过#
进行注解信息!
读取配置文件
我们在配置文件配置的信息又如何读取呢?
我们可以通过@Value
注解中的${}
输入配置的key
值,进行读取操作:
注意${}
需要""
包裹:例如:@Value("${server.port}")
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYML {
@Value("${server.port}")
private String port;
@PostConstruct
public void postConstruct(){
System.out.println("Read Properties,port:"+port);
}
}
@PostConstruct
注解:这是java提供的注解
修饰非静态的的void方法,被修饰的方法会在服务器加载Servlet时运行并且只允许一次! 在PostConstruct构造函数之后执行,再init方法之前!
通常我们会是在Spring框架中使用到@PostConstruct注解
该注解的方法在整个Bean初始化中的执行顺序:
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)
properties不足之处
虽然
properties
是SpringBoot默认的配置格式,并且优先级高!
但是该格式的配置文件,因为是由=
进行建值连接会有很多冗余信息!
还有该配置文件只能用于java
项目代码,通用性低
YML配置文件
yml
全称 YAML (YAML Ain’t a Markup Language)YAML不是一种标记语言,通常以.yml
为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。. 可用于如: Java,C/C++, Ruby, Python, Perl, C#, PHP等。.
和其他高级语言类似,可以简单表达数组,列表,等数据形态! 通过空白符号缩进和大量依赖外观特点特别适合用于表达或编辑数据结构,各种配置文件!
最大优势就是跨语言!
基本语法
yml是树形结构的配置文件,基础语法是
key: value
键和值之前通过:
英文冒号和空格进行连接!冒号后面的空格不能省略!!
键值对之前通过换行分割!
#设置项目端口
server:
port: 8090
# 配置数据库连接信息
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
username: root
password: 123456
key : value
中间的空格不能省略!
如果省略了中间空格IDEA下key
值没有语法高亮!!!
读取配置文件
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYML {
@Value("${server.port}")
private String port;
@PostConstruct
public void postConstruct(){
System.out.println("Read YML,port:"+port);
}
}
yml
格式的配置文件读取方式和properties
配置文件读取方式是相同的!
通过@Value("${}")
注解读取!
yml配置使用
- 可以配置不同类型的数据 及null
# 字符串
string.value: Hello
#布尔值 true/false
boolean.value: true
# 整数
int.value: 10
int.vaule1: 0b1010_0111_1010_1110 # 二进制
# 浮点数
float.value: 3.1415
float.value1: 3.14159e-5 # 科学计数法
# NUll ~ 代表 null
null.value: ~
字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。
# 字符串默认不需要引号!
string:
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."
我们进行读取操作!
- 字符串默认不用加上单引号或者双引号
- 字符串加上单引号后,会转义特殊字符,使该特殊字符变成普通字符!
- 双引号不会转义特殊字符的含义:就是说换行符会进行换行操作! 而默认不加引号或者加上单引号都会使换行符失去意义!
yml配置对象
#方式一:
student:
name: 刘备
age: 18
#方式二:
student1: {name: 刘备, age: 18}
配置的对象不能用@Value
注解进行读取
要通过@ConfigurationProperties(prefix="keyname")
注解进行读取!
package com.example.demo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
//通过这个注解将配置文件中的student对象信息初始化给实例Student注册到spring中!
//读取对象配置需要重写setter和getter方法才能读取到,否则无用!
@ConfigurationProperties(prefix = "student")
@Component
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
@Component
public class ReadYML {
@Autowired //注入对象
private Student student;
@PostConstruct
public void postConstruct(){
System.out.println(student);
}
}
注意:
只有实现了getter和setter方法读取对象配置才能生效否则没用
配置集合
# 配置集合List
dbtypes:
name:
- mysql
- sqlserver
- db2
#行内写法
dbtypes1: {name: [mysql,sqlserve,db2]}
集合的读取方式和对象一样也是通过@ConfigurationProperties(prefix="")
注解进行读取配置操作!
package com.example.demo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@ConfigurationProperties(prefix = "dbtypes")
@Component
@Data //重写geter和setter方法
public class ListConfig {
private List<String> name;//这里名字要和配置文件key对应否则失败!
}
properties配置和yml配置比较
.properties
是以key=value
键值对的形式配置文件,.yml
还是树形结构的形式进行配置文件key value之前,通过:
加上空格设置空格不能省略!properties
为早期并且默认的配置格式,优先级比yml
高,但是配置存在一定的冗余yml
通用性好,支持多语言配置文件如;java,python,golang等,如果是云服务开发,一份配置文件可以用于不同语言的代码!yml
虽然和properties
共存,但是一般建议一个项目中使用统一格式的配置文件
- 点赞
- 收藏
- 关注作者
评论(0)