【后端开发】Spring配置文件

文章目录

配置文件

  • 硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中,也就是常说的"代码写死"。
  • 配置文件主要是为了解决硬编码带来的问题,把可能会发生改变的信息,放在一个集中的地方,当启动程序时,应用程序从配置文件中读取数据,并加载运行。
  • 使用配置文件,可以使程序完成用户和应用程序的交互,或者应用程序与其他应用程序的交互
    SpringBoot支持并定义了配置文件的格式,Spring Boot 配置文件有以下三种:

1.application.properties

2.application.yml

3.application.yaml

  • 理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中,当 .properties 和 .yml 并存时,两个配置都会加载,如果配置⽂件内容有冲突,则以 .properties 为主, 也就是 .properties 优先级更⾼。
  • 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,通常会采取⼀种统⼀的配置文件格式,这样可以更好的维护(降低故障率)。

properties配置文件

properties 配置文件是最早期的配置文件格式,也是创建 SpringBoot 项目默认的配置文件。

基本语法

properties 是以键值的形式配置的,key 和 value 之间是以"="连接的。

示例:

设置服务器端口号为9090,默认为8080。

java 复制代码
# 配置项⽬端⼝号
Server.port=9090

配置连接数据库信息。

java 复制代码
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
  • 缺陷:properties 配置文件中会有很多的冗余的信息。

读取配置文件

如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。

@Value 注解搭配使用" ${}"的格式读取

配置文件设置变量。

java 复制代码
library.page.num=10

读取配置文件的变量。

java 复制代码
@Repository
public class BookDao {
    @Value("${library.page.num}")
    private int num;
}

yml配置文件

yml 为yaml的简写,实际开发中出现频率最高,yaml 和ylm 的使用方式一样。

基本语法

yml 是树形结构的配置文件,它的基础语法是"key: value",key 和 value 之间使用英文冒号加空格的方式组成,空格不可省略。

yml 复制代码
# 配置项⽬端⼝号
server:
  port: 9090

配置连接数据库信息。

yml 复制代码
#配置数据库连接信息
spring:
  datasource:
  url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
  username: root
  password: 123456

读取配置文件

yml读取配置的方式和 properties 完全相同

配置空字符串及null

yml 复制代码
# Null,~代表null
null.value: ~
 
# "" 空字符串
#:直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value: ''

单双引号

yml 复制代码
string:
  str1: Hello \n Spring Boot.
  str2: 'Hello \n Spring Boot.'
  str3: "Hello \n Spring Boot"

字符串默认不用加上单引号或者双引号

单引号会转义特殊字符,使其失去特殊功能,始终是一个普通的字符串----特殊字符没用了,比如"\n"

双引号不会转义字符串里面的特殊字符,特殊字符会表示本身的含义----特殊字符有用,比如"\n"

配置对象

示例:

yml 复制代码
student:
  id: 1
  name: zhangsan
  age: 19

接收该对象时,需要搭配 @ConfigurationProperties 注解来读取。

java 复制代码
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
    private Integer id;
    private String name;
    private Integer age;
}

配置集合

yml 复制代码
list:
  name:
    - aa
    - bb
    - cc

集合的读取和对象一样,使用 @ConfigurationProperties 来读取。

java 复制代码
@Component
@ConfigurationProperties("list")
@Data
public class ListConfig {
    private List<String> name;
}

配置Map

yml 复制代码
mapList:
  map:
    k1: v1
    k2: v2
    k3: v3

集合的读取和对象一样,使用 @ConfigurationProperties 来读取。

java 复制代码
@Data
@Component
@ConfigurationProperties("mapList")
public class MapConfig {
    private Map<String, String> map;
}

优缺点

优点

  • 可读性高,写法简单, 易于理解
  • 支持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态
  • 支持更多的编程语言,不止是java中可以使用,在Golang,Python,Ruby,JavaScript中也可以使用

缺点

  • 不适合写复杂的配置⽂件
  • 对格式有较强的要求(空格规范)
相关推荐
掘金-我是哪吒14 分钟前
分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南
java·分布式·微服务·云原生·架构
亲爱的非洲野猪40 分钟前
Kafka消息积压的多维度解决方案:超越简单扩容的完整策略
java·分布式·中间件·kafka
wfsm43 分钟前
spring事件使用
java·后端·spring
微风粼粼1 小时前
程序员在线接单
java·jvm·后端·python·eclipse·tomcat·dubbo
缘来是庄1 小时前
设计模式之中介者模式
java·设计模式·中介者模式
rebel2 小时前
若依框架整合 CXF 实现 WebService 改造流程(后端)
java·后端
代码的余温3 小时前
5种高效解决Maven依赖冲突的方法
java·maven
慕y2743 小时前
Java学习第十六部分——JUnit框架
java·开发语言·学习
paishishaba3 小时前
Maven
java·maven
张人玉3 小时前
C# 常量与变量
java·算法·c#