4人参与 • 2026-03-20 • Java
springboot 定义了规范的配置文件格式,用于集成其他框架,并集中管理项目各类配置信息,典型场景包括:
修改 application.properties ⽂件
server.port=9090

显⽰tomcat启动端⼝号为9090
访问程序:http://127.0.0.1:9090/login.html

此时:http://127.0.0.1:808/login.html 就不能再访问了
spring boot 配置文件有以下三种:
application.propertiesapplication.ymlapplication.yaml注意:
properties 优先级比yml. yaml的优先级要高一些
yml 为 yaml 的简写,实际开发中出现频率最高。yaml 和 yml 的使用方式一样,课堂中只讲 yml 文件的使用。
当应用程序启动时,spring boot 会自动从 classpath 路径找到并加载 application.properties 和 application.yaml 或者 application.yml 文件。
也可以通过 spring.config.name 指定文件路径和名称,参考 https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.files
如下图所示:

类似商品包装,.properties 是老款包装(spring boot 项目默认格式),.yml 是新版包装,实际开发中更推荐使用。
.properties 和 .yml 可共存,启动时都会加载;若配置冲突,.properties 优先级更高。注意事项:

重启idea ,会出现有一点小问题

我们重启idea我们会发现,他乱码了,遇到这种情况,我们没有恢复的办法
解决办法:
1.

2.

3.这个只是修改了这个的配置,我们需要修改整个的这个配置文件

4.修改本地的配置

key=value 形式# 添加注释# 配置项目端口号 server.port=8080 # 配置数据库连接信息 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterencoding=utf8&usessl=false spring.datasource.username=root spring.datasource.password=root
@value 注解,以 ${key} 格式读取mykey.key1 = bite
import org.springframework.beans.factory.annotation.value;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.restcontroller;
@restcontroller
public class propertiescontroller {
@value("${mykey.key1}")
private string key1;
@requestmapping("/key")
public string key(){
return "读取到值:"+key1;
}
}@value 注解可直接注入配置文件中的值到类成员变量。/key 接口时,会返回配置文件中 mykey.key1 对应的值(如 读取到值:bite)。
1. 基本定义
@postconstruct 是 java ee 中的注解(spring 也完全支持),作用是:在 spring 容器创建完 bean 实例、完成依赖注入后,自动执行标注了这个注解的方法。
简单说:bean 先被创建 → 依赖注入(比如 @autowired 注入的对象)→ @postconstruct 方法执行。
二、完整可运行示例
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.component;
import javax.annotation.postconstruct;
// 普通的spring bean
@component
public class userservice {
// 依赖注入的对象
@autowired
private configservice configservice;
// 空参、无返回值的初始化方法
@postconstruct
public void init() {
// 此时configservice已经完成注入,可安全使用
string config = configservice.getconfig();
system.out.println("bean初始化完成,加载配置:" + config);
// 还可以做缓存初始化、数据预加载等操作
}
}
// 依赖的configservice(示例)
@component
class configservice {
public string getconfig() {
return "数据库连接配置:jdbc:mysql://localhost:3306/test";
}
}三、关键注意点
@autowired 依赖注入,早于 bean 被业务代码使用;initializingbean 接口(但 @postconstruct 更简洁)properties 配置是以key-value的形式配置的,如下图所⽰:

从上述配置key看出,properties配置⽂件中会有很多的冗余的信息,⽐如这些:
想要解决这个问题,就可以使⽤yml配置⽂件的格式化了.
yml 是 yaml 的缩写,它的全称是 yet another markup language,翻译成中文就是 “另一种标记语言”。我们先来学习 yml 的语法。
yml 是树形结构的配置文件,它的基础语法是 "key: value"。

# 正确写法(冒号后必须带空格) server: port: 8080 host: localhost # 错误写法(无空格,配置无法解析) # server:port:8080
# 字符串(默认无需引号,特殊字符需加引号) name: 张三 nickname: "zhangsan:001" # 包含特殊符号时加双引号 remark: 'hello\nworld' # 单引号会转义特殊字符,\n 不会换行 # 数字 age: 20 score: 98.5 # 布尔值 enabled: true disabled: false # 空值 empty: null # 或 ~ # 日期(iso 8601 格式) birthday: 2024-03-18
# 写法1:短横线 + 空格(推荐,层级清晰)
user:
hobbies:
- 篮球
- 游泳
- 编程
# 写法2:中括号简写(单行)
user:
tags: [java, springboot, mysql]# 多层嵌套(springboot 常用)
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.driver
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
redis:
host: 127.0.0.1
port: 6379
timeout: 5000ms# 单行注释(仅支持单行,用 # 开头) server: port: 8080 # 端口配置(行内注释也需用 #) # 多行注释需每行加 # # 开发环境端口 # 生产环境可改为 80
使用示例:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/dbname?characterencoding=utf8&usessl=false
username: root
password: rootyml 和 properties 连接数据库的配置对比:

# 字符串 string.value: hello # 布尔值,true或false boolean.value: true boolean.value1: false # 整数 int.value: 10 # 浮点数 float.value: 3.14159 # null,~代表null null.value: ~ # "" 空字符串 #,直接后面什么都不加就可以了,但这种方式不直观,更多的表示是使用引号括起来 empty.value: ''
5.2.1.1 yml 配置读取
yml 读取配置的方式和 properties 相同,使用@value注解即可,实现代码如下:
yml 配置:
string: hello: bite
java 代码:
@restcontroller
public class readyml {
@value("${string.hello}")
private string hello;
@requestmapping("/ymlkey")
public string key(){
return "读取到值:"+hello;
}
}访问地址:http://127.0.0.1:8080/ymlkey
运行结果:(页面显示:读取到值:bite)

5.2.1.2 注意事项:value 值加单双引号
字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。
尝试在 application.yml 中配置如下信息:
string: str1: hello \n spring boot. str2: 'hello \n spring boot.' str3: "hello \n spring boot."
读取程序实现代码如下:
@restcontroller
public class readyml {
@value("${string.str1}")
private string str1;
@value("${string.str2}")
private string str2;
@value("${string.str3}")
private string str3;
@requestmapping("/yml")
public string readyml(){
system.out.println(str1);
system.out.println(str2);
system.out.println(str3);
return "yml";
}
}以上程序的执行结果如下:
hello \n spring boot.
hello \n spring boot.
hello
spring boot.
从上述结果可以看出:
此处的转义理解起来会有些拗口,\n 本意表示的是换行:
\n 不再表示换行,而是表示一个普通的字符串。\n 表示的是它本身的含义,就是换行。javaee 的学习重在理解和使用,不纠结概念和描述
想要快速赋值:value

我们还可以在 yml 中配置对象,如下配置:
student: id: 1 name: java age: 18
或者是使用行内写法(与上面的写法作用一致):
student: {id: 1,name: java,age: 18}这个时候就不能用 @value 来读取配置中的对象了,此时要使用另一个注解 @configurationproperties 来读取,具体实现如下:
import lombok.data;
import org.springframework.boot.context.properties.configurationproperties;
import org.springframework.stereotype.component;
@configurationproperties(prefix = "student")
@component
@data
public class student {
private int id;
private string name;
private int age;
}调用类的实现如下:
@restcontroller
public class studentcontroller {
@autowired
private student student;
@requestmapping("/readstudent")
public string readstudent(){
return student.tostring();
}
}访问地址:http://127.0.0.1:8080/readstudent
配置文件也可以配置 list 集合,如下所示:
dbtypes:
name:
- mysql
- sqlserver
- db2集合的读取和对象一样,也是使用 @configurationproperties 来读取的,具体实现如下:
import lombok.data;
import org.springframework.boot.context.properties.configurationproperties;
import org.springframework.stereotype.component;
import java.util.list;
@component
@configurationproperties("dbtypes")
@data
public class listconfig {
private list<string> name;
}访问集合的实现如下:
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.restcontroller;
@restcontroller
public class readyml2 {
@autowired
private listconfig listconfig;
@requestmapping("/readlist")
public string readlist() {
return listconfig.tostring();
}
}配置文件也可以配置 map,如下所示:
maptypes:
map:
k1: kk1
k2: kk2
k3: kk3或者是使用行内写法(与上面的写法作用一致):
maptypes: {map: {k1: kk1,k2: kk2, k3: kk3}}
map 的读取和对象一样,也是使用 @configurationproperties 来读取的,具体实现如下:
import lombok.data;
import org.springframework.boot.context.properties.configurationproperties;
import org.springframework.stereotype.component;
import java.util.hashmap;
@component
@configurationproperties("maptypes")
@data
public class mapconfig {
private hashmap<string,string> map;
}@restcontroller
public class readyml2 {
@autowired
private mapconfig mapconfig;
@requestmapping("/readmap")
public string readstudent() {
return mapconfig.tostring();
}
}不适合写复杂的配置文件
比如 properties 格式如下:
keycloak.realm = demo keycloak.resource = fm-cache-cloud keycloak.credentials.secret = d4589683-0ce7-4982-bcd3 keycloak.security[0].authroles[0] = user keycloak.security[0].collections[0].name = ssologinurl keycloak.security[0].collections[0].patterns[0] = /login/*
转换为 yml:
keycloak:
realm: demo
resource: fm-cache-cloud
credentials:
secret: d4589683-0ce7-4982-bcd3
security:
- authroles:
- user
collections:
- name: ssologinurl
patterns:
- /login/*转换的过程也比较花费精力,如果配置更复杂一点,可读性会更差,代码也会更难写
对格式有较强的要求(一个空格可能会引起一场血案)
到此这篇关于springboot 配置文件核心用法(properties & yaml)详解的文章就介绍到这了,更多相关springboot 配置文件用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论