整个项目中所有重要的数据都是在配置文件中配置的,比如:
Spring Boot 配置文件主要分为以下两种格式:一般在 resources 包下
application.propertiesapplication.yml说明:
properties是以key=value的形式配置的键值对类型配置文件,而yml是以key: value的形式配置的键值对类型配置文件;
properties是早期且系统默认的配置文件格式,但配置存在一定的冗余数据,而yml可以更好的解决数据冗余问题;
yml通用性更好,支持多语言,支持更多的数据类型;
两种格式的文件可以同时存在于一个项目中,两者可以同时加载。但是.properties文件优先级高,当对同一数据做出不同不同配置时,会覆盖.yml文件。而且也不建议同时写两个文件。
properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如:
# 配置项目端口号
server.port=8080
# 配置数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
yml 是以键值的形式配置的,key 和 value 之间是以“: ”连接的,如:
spring:
main:
# 关闭 Spring 默认的 banner 显示
banner-mode: off
# 关闭启动日志打印
log-startup-info: false
banner:
image:
# 让 banner 显示某张图的字符形式
location: classpath:hill.png
datasource:
url: jdbc:mysql://127.0.0.1:3306/java22_diaocha?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
# 显示更详细的调试信息 默认是 false
debug: true
logging:
file:
# 使用 YAML 格式时,可以正常使用中文。YAML 下不用再做 \ 的转义了
name: F:\IDEA Project volume\03_JavaEE\day4_配置文件
# 设置日志输出级别
level:
# 如果是包名,则这个包下的所有类(孩子 + 子孙)都遵守这个输出级别
com.spring.day4: info
# 如果是类名,则只有这个类遵守这个输出级别
com.spring.day4.Demo2: debug
pattern:
# 控制台的日志格式(只输出消息本身)
# 中间有 YAML 的特殊字符,用单引号引起来
console: '%clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n'
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
# 整数
int.value: 10
# Null,~代表null
null.value: ~
student:
id: 1
name: Java
age: 18
或者,行内写法:
student: {id: 1,name: Java,age: 18}
dbtypes:
name:
- mysql
- sqlserver
- db2
或者,行内写法:
dbtypes: {name: [mysql,sqlserver,db2]}
SpringBoot分别提供3种方式读取项目中配置文件的内容。
# 自定义对象:
wangshaoyu:
name: 王少宇
age: 20
address: 中国
Environment是用来读取应用程序运行时的环境变量的类,可以通过key-value的方式读取配置文件和系统环境变量,命令行输入参数,系统属性等,具体如下:
@Slf4j
@Component
public class ReadFromConfig1 {
// 将 Spring 下的 Environment 对象注入
@Autowired
public ReadFromConfig1(Environment environment) {
// getProperty("") 指向需要的value对应的key值
String name = environment.getProperty("wangshaoyu.name");
log.info("读取到的 wangshaoyu.name = " + name);
int age = environment.getProperty("wangshaoyu.age");
log.info("读取到的 wangshaoyu.age = " + age);
String address = environment.getProperty("wangshaoyu.address");
log.info("读取到的 wangshaoyu.address = " + address);
}
}
如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使用“${}”的格式读取,如下代码所示:
@Slf4j
@Component
public class ReadFromConfig2 {
public ReadFromConfig2(
// 一定要使用 Spring 下的那个 @Value 注解
@Value("${wangshaoyu.name}") String name,
@Value("${wangshaoyu.age}") int age,
@Value("${wangshaoyu.address}") String address) {
log.info("姓名: " + name);
log.info("年龄: " + age);
log.info("地址: " + address);
}
}
使用@ConfigurationProperties首先建立配置文件与对象的映射关系,然后在控制器方法中使用@Autowired注解将对象注入。具体如下:
1.定义配置类 :需要将该类注册到 Spring 中
// 使用 @Component 注册到 Spring 中
@Component
// prefix 指向配置属性的前置项
@ConfigurationProperties(prefix = "wangshaoyu")
public class WangshaoyuConfig {
private String name;
private String age;
private String address;
// setter 方法是必须的,否则不会生效,即使属性是用 public 修饰的
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setAddress(String address) {
this.address = address;
}
// 为了能访问到私有属性,再写个 getter 方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
}
2.使用配置类
@Slf4j
@Component
public class ReadFromConfig3 {
// 将配置文件类注入
@Autowired
public ReadFromConfig3(WangshaoyuConfig config) {
log.info("读取到的 wangshaoyu.name = " + config.getName());
log.info("读取到的 wangshaoyu.age = " + config.getAge());
log.info("读取到的 wangshaoyu.address = " + config.getAddress());
}
}

总结:
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是SpringBoot配置文件的学习,认识了两种格式的配置文件的写法,以及读取配置文件的三种方法。之后的学习内容将持续更新!!!