Spring Boot的两种配置文件

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Spring Boot项目中重要的数据都是在配置文件中配置的,下边我们就来学习SpringBoot中的配置文件的具体详情。

1.配置文件的作用及格式


在SpringBoot的整个项目中,所有重要的数据都是在配置文件中设置的,比如:


  • 数据库的连接信息(包含用户名和密码的设置)
  • 项目的启动端口
  • 第三方系统的调用密钥等信息
  • 用于发现和定位问题的普通日志和异常日志


如果没有配置信息,那么Spring Boot项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的。


Spring Boot的配置文件的分类如下:

1、系统的配置文件,比如连接字符串、日志的相关设置,是系统定义好的。

2、用户自定义的。


Spring Boot的配置文件主要分为以下两种格式:


  • .properties
  • .yml


微信图片_20230111201911.png

properties和yml是两个不同时代的产物,properties就属于iPhone 8,而yml属于最新的iPhone 14 pro Max,yml天然支持中文,如果要想让properties也支持中文,需要进行以下配置:


在Settings搜索栏中搜索encoding


微信图片_20230111201908.png

然后将所有位置的编码方式都改成UTF-8


微信图片_20230111201904.png

如果想让所有生成的新项目也同样支持中文,再在此处也进行设置:


微信图片_20230111201900.png

两种格式的配置文件遵循以下规则:


一个项目中可以存在以上两种配置文件(properties和yml),但是不建议一个项目中出现两种配置文件。

当一个项目的某个配置,出现在两种格式的配置文件中时,尼玛配置项会以properties为主(忽略yml中的配置)


2.properties 配置文件


2.1 基本语法


properties是以键值对的形式配置的,Key和Value之间是以“=”连接的,如:


# 配置项目端口号
server.port=8080
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8mb4&useSSL=true
spring.datasourse.name=root
spring.datasourse.password=1234
# 自定义配置项
csdn.token=xxx


配置文件中可以使用#来添加注释信息


2.2 读取配置文件


如果想在项目中主动的读取配置文件中的内容,就可以使用@Value注解搭配${}格式来读取,如下代码所示:


@Controller
public class UserController {
    @Value("${server.port}")
    private String port;
    @PostConstruct
    public void UserController(){
        System.out.println("post:"+port);
    }
}


运行结果如下:


微信图片_20230111201856.png

@Controller在Spring Boot启动的时候会注入到框架中,注入到框架中时会执行@PostConstruct初始化方法,这个时候就能读取到配置信息了。


2.3 缺点分析


像下图这几条配置信息,就有很多的冗余


微信图片_20230111201853.png

如果想解决以上冗余问题,就需要使用yml配置文件了。


3.yml 配置文件


3.1 文件说明


yml是YAML的缩写,它的全称Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔”。


其有以下优点:


  • 写法简单,可读性高
  • 支持更多的数据类型
  • 可以跨语言使用,支持更多的编程语言,比如Golang、PHP、Python、Ruby等。


3.2 基本语法


yml配置文件的基础语法是Key: Value,注意key和value之间使用英文冒号加空格的方式组成,其中的空格不能省略。


下边将properties中的配置,在yml文件中进行表示:


# 配置项目端口号
server: 8080
# 连接数据库
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8mb4&useSSL=true
    name: root
    password: 1234
# 自定义配置项
csdn.token: xxx


两者对比:


微信图片_20230111201848.png

yml读取配置的方法和properties读取配置的方法相同,都是使用@Value注解搭配${}格式来读取。


3.3 进阶使用


3.3.1 单双引号问题


在配置文件中加上如下配置:


微信图片_20230111201843.png

获取配置,查看打印情况:


@Controller
public class UserController {
    @Value("${string1}")
    private String string1;
    @Value("${string2}")
    private String string2;
    @Value("${string3}")
    private String string3;
    @PostConstruct
    public void UserController(){
        System.out.println("string1:"+string1);
        System.out.println("string2:"+string2);
        System.out.println("string3:"+string3);
    }
}

微信图片_20230111201837.png

在运行结果中可以发现,只有第三行打印结果换行了。


这是因为yml中如果使用了双引号,就会按照原语义执行(\n意为换行),如果是单引号或者什么都不加,那么默认会将字符串中的特殊字符进行自动转义,比如\n->\\n(转义)处理


3.3.2 配置对象


我们还可以在yml中配置对象,有以下两种配置方式:


微信图片_20230111201834.png

这个时候就不能用@Value来读取配置中的对象了,此时要使用另一个注解@ConfigurationProperties来读取,具体实现如下:


@Data
@ConfigurationProperties(prefix="student2")
@Component
public class Student {
    private int id;
    private String name;
    private int age;
}


@Controller
public class UserController {
    @Autowired
    private Student student;
    @PostConstruct
    public void UserController(){
        System.out.println("student2:"+student);
    }
}


运行结果如下:


微信图片_20230111201830.png

3.3.3 配置集合


配置文件也可以配置list集合,如下所示:


微信图片_20230111201827.png

集合的读取和对象一样,也是使用@ConfigurationProperties来读取的,具体实现如下:


@Component
@Data
@ConfigurationProperties("dbtypes")
public class ReadList {
    private List<String> name;
}


微信图片_20230111201823.png

4.properties VS yml


  • properties是以key=value的形式配置的键值类型的配置文件,而yml使用的是类似json格式的树形配置方式进行配置的,yml层级之间使用换行缩进的方式配置,key和value之间使用: 英文冒号加空格的方式设置,并且空格不可省略。
  • properties是早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用yml可以很好的解决数据冗余的问题。
  • yml通用性更好,支持更多的语言
  • yml支持更多的数据类型,比如对象、集合等类型。


5.常用设置


我们的项目通常来说最少会有两个环境,一个是开发环境,另一个是生产环境,那么肯定一些配置文件是要根据环境的不同而做出改变的,这时我们常常使用以下这种设置配置文件的方式。


多个环境共同的配置,放在同一个配置文件下

多个环境不同的配置,分别放在不同的配置文件下,然后在主配置文件中设置运行哪一个配置文件

不同平台配置文件的命名规则:

application-平台.yml(properties)

微信图片_20230111201814.png


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
Java Spring
Spring boot 运行服务jar外配置配置文件方式总结
Spring boot 运行服务jar外配置配置文件方式总结
918 0
|
1月前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
83 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
21天前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
1月前
|
Java 测试技术 Spring
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
这篇文章介绍了Spring Boot中配置文件的语法、如何读取配置文件以及如何通过静态工具类读取配置文件。
46 0
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
|
2月前
|
消息中间件 NoSQL 安全
(转)Spring Boot加载 不同位置的 application.properties配置文件顺序规则
这篇文章介绍了Spring Boot加载配置文件的顺序规则,包括不同位置的application.properties文件的加载优先级,以及如何通过命令行参数或环境变量来指定配置文件的名称和位置。
|
3月前
|
Java Spring 传感器
AI 浪潮席卷,Spring 框架配置文件管理与环境感知,为软件稳定护航,你还在等什么?
【8月更文挑战第31天】在软件开发中,配置文件管理至关重要。Spring框架提供强大支持,便于应对不同环境需求,如电商项目的开发、测试与生产环境。它支持多种格式的配置文件(如properties和YAML),并能根据环境加载不同配置,如数据库连接信息。通过`@Profile`注解可指定特定环境下的配置生效,同时支持通过命令行参数或环境变量覆盖配置值,确保应用稳定性和可靠性。
62 0
|
3月前
|
XML Java 数据库连接
深入解析 Spring 配置文件:从基础到高级
【8月更文挑战第3天】Spring配置文件是构建与管理Spring应用的核心,它涵盖了从基础到高级的各种配置技巧。基础配置采用`.xml`格式定义Bean及其依赖;中级配置包括设置Bean作用域及引入属性文件;高级配置则涉及AOP、事务管理和与其他框架的整合。熟练掌握这些配置能帮助开发者构建出更为灵活且易维护的应用系统。
|
4月前
|
存储 安全 Java
Spring Boot中的配置文件加密
Spring Boot中的配置文件加密
|
5月前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
54 1
|
6月前
|
Java 容器 Spring
Spring的加载配置文件、容器和获取bean的方式
Spring的加载配置文件、容器和获取bean的方式
52 3
Spring的加载配置文件、容器和获取bean的方式