定制产品网站有哪些,狼窝网站更新升级通知,3合一网站怎么做,阿里巴巴国际站买家入口文章目录 什么是配置文件SpringBoot配置文件配置文件快速入手配置文件的格式properties 配置文件说明properties 基本语法读取配置文件信息properties 配置格式缺点 yml 配置文件说明yml 基本语法使用 yml 连接数据库 yml 使用进阶yml 配置不同数据类型配置对象配置集合配置Map… 文章目录 什么是配置文件SpringBoot配置文件配置文件快速入手配置文件的格式properties 配置文件说明properties 基本语法读取配置文件信息properties 配置格式缺点 yml 配置文件说明yml 基本语法使用 yml 连接数据库 yml 使用进阶yml 配置不同数据类型配置对象配置集合配置Map 设置不同环境的配置文件YML优缺点 什么是配置文件
配置文件是一种文本文件通常用于存储程序的参数和设置。它包含了程序运行所需的各种选项和配置信息例如界面风格、服务器连接信息、默认语言等。这些信息可以通过键值对的形式表示也可以使用特定的语法和结构描述更复杂的配置信息。
配置文件通常由程序在启动时读取和解析以自定义程序的行为。例如在网站开发中网站的配置文件通常包含了数据库连接信息、安全性设置、日志记录等重要信息。在操作系统中配置文件则可以用于指定各种系统参数如网络连接、设备驱动程序等。
配置文件的格式和内容因程序而异常见的配置文件格式包括INI文件、XML文件、JSON文件等。INI文件是最早的配置文件格式之一它使用简单的键值对语法来存储配置信息。XML和JSON文件则更加灵活和可扩展可以描述更复杂的配置信息。
除了使用传统的文本编辑器手动编写配置文件外现在也有许多工具可以帮助用户轻松地编辑和管理配置文件。例如一些应用程序具有自己的配置文件编辑器用户可以通过界面来直观地编辑配置信息。另外一些配置管理工具则可以帮助用户自动化地管理和维护配置文件例如版本控制、备份和恢复等。
SpringBoot配置文件
SpringBoot⽀持并定义了配置⽂件的格式也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的⽬的。
很多项⽬或者框架的配置信息也放在配置⽂件中⽐如
项目的启动端口数据库的连接信息包含用户名和密码的设置第三⽅系统的调⽤密钥等信息⽤于发现和定位问题的普通⽇志和异常⽇志等
每个 Spring 项目都内置了一个 Tomcat 服务器而 Tomcat 默认使用的端口是 8080如果 8080 端口被占用或者多个 Spring 项目同时启动的话就会出现某些程序无法正常启动的情况所以这时候就可以使用 Spring 的配置文件修改启动的端口。
不仅如此在日常生活中我们很多时候都会和数据库打交道而每个人甚至一个人的不同机器上的数据库用户名、密码和 IP 地址都是有区别的那么当这个项目交给别人的时候就需要在 Spring 配置文件中修改相关的配置。
不仅如此一些公共的属性以及会根据情况而改变的属性都可以放在这个 Spring 配置文件中通过使用 Spring 配置文件可以帮助我们解决很多的问题。
配置文件快速入手
我们先通过一个简单的例子来了解配置文件的作用。
我们创建 SpringBoot 项目的时候会自动生成一个 application.properties 文件这就是默认的 SpringBoot 配置文件我们在这个配置文件中修改启动端口号看看结果。 server.port9090这里可以看到启动端口号修改成功了。 如果我们想要访问这个项目就不能使用 127.0.0.1:8080 了而要使用 127.0.0.1:9090 地址了。
配置文件的格式
SpringBoot 的配置文件有三种形式
application.propertiesapplication.ymlapplication.yaml
yml 是 yaml 的缩写两个使用方式是相同的。并且这两个配置文件还是生活中使用频率最高的。
当应⽤程序启动时SpringBoot会⾃动从classpath路径找到并加载 application.properties 和 application.yaml 或者 application.yml ⽂件当然也可以使用 spring.config.name 指定文件路径和名称。
那么 properties 配置文件和 yml 配置文件有什么区别呢区别主要体现在语法和使用场景上。properties 配置格式出现的比较早而 yml 配置格式出现的则比较晚并且在语法上yml 配置格式相较于 properties 配置格式来说更加的简介并且很重要的是properties 配置文件中如果出现中文的话出现乱码的几率非常大而 yml 配置格式则对中文的支持度是比较高的。存在两种配置格式可以一定程度上降低程序员的学习成本。
理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中当 .properties 和 .yml 并存时两个配置都会加载。如果配置⽂件内容有冲突则以 .properties 为主也就是 .properties 优先级更高虽然理论上来讲 .properties 可以和 .yml 共存但实际的业务当中我们通常会采取⼀种统⼀的配置⽂件格式这样可以更好的维护(降低故障率)
properties 配置文件说明
properties 配置⽂件是最早期的配置⽂件格式也是创建 SpringBoot 项⽬默认的配置⽂件。
properties 基本语法
properties 配置格式是以键值对的形式存在的key 和 value 之间通过“”连接。并且 key 和 value 之间可以存在多个空格。
# 配置启动端口号
server.port9090# 配置数据库连接信息
spring.datasource.urljdbc:mysql://127.0.0.1:3306/test?charEncodingutf8userSSLfalse
spring.datasource.nameroot
spring.datasource.password123456配置文件中使用 # 添加注释信息。
读取配置文件信息
在项目中如果想要主动读取配置文件中的信息的话可以使用 Value 注解来实现。
mykeyzhangsanpackage com.example.springconfiguration;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)private String key;RequestMapping(/getkey)public String getKey() {return 获取到key key;}
} 这是为什么呢我们的 mykey 不是 zhangsan 吗为什么获取到的是 mykey 呢
这是因为 Spring 将Value 中的 “mykey” 当作了 value 赋值给了 key那么我们该如何才能获取到 key mykey 中的 value 值呢
要想获取到 Value key 中的 value 值需要使用 ${} 来获取到这里面的 key 的 value 值。
Value(${mykey})properties 配置格式缺点
为什么说 properties 配置格式对中文不是很友好呢我们来看看
mykey张三为什么就肯定说是 properties 配置文件的问题而不是我们前端接收到响应之后出现的问题呢我们打断点看看。 这里我们读取到 mykey 的时候就是乱码而是我的 idea 也是默认是 UTF-8 格式是支持中文的所以说 properties 配置文件中尽量不要出现中文。
不仅如此通过观察 properties 配置文件中的信息我们会发现里面的内容是比较冗余的。 以上只是 properties 的两个显著的缺点。
yml 配置文件说明
yml 是 YAML 的缩写它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔。光看 yml 的翻译就可以看出来 yml 的理想是非常远的“语言”。我们先来看看 yml 配置文件的基本语法。
yml 基本语法
yml 配置文件对于语法要求是非常严格的他虽然也是以键值对的形式存在的但是 key 和 value 之间必须以 冒号 空格 相连接这个空格是不能省略的。
如果配置成功那么属性就会有高亮提示。 这种灰色就说明该属性没有配置成功也就是语法存在问题。 空格可以有多个。
使用 yml 连接数据库
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/test?characterEncodingutf8userSSLfalseusername: rootpassword: 123456这种 yml 配置方式显示出了层级关系并且节省了很多代码url、username和password属性属于datasource而 datasource 则属于 spring。
yml 使用进阶
yml 的使用不止有这些还有其他更厉害的用法。
yml 配置不同数据类型
前面 properties 配置格式差不多所有的配置都是字符串类型而在 yml 配置格式中还存在布尔类型、整数类型、浮点数类型以及Null类型。
# 字符串
string.value: hello# 布尔类型
boolean.value: true
boolean.value1: false# 整数类型
int.value: 10# 浮点数
float.value: 3.14159# Null ~ 代表null
null.value: ~那么 yml 配置文件的属性如何读取呢这些基本的数据类型是和 properties 配置格式是一样的都是使用 Value 注解来获取到指定的配置。
package com.example.springconfiguration;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(${string.value})private String stringValue;Value(${boolean.value})private boolean flg1;Value(${boolean.value1})private boolean flg2;Value(${int.value})private int intValue;Value(${float.value})private float floatValue;Value(${null.value})private String nullValue;RequestMapping(/getkey)public String getKey() {return stringValue | flg1 | flg2 | intValue | floatValue | nullValue;}
} 值得注意的是在 yml 配置格式中字符串的表现形式有三种一种是不加引号、一种是加单引号、还有一种就是加双引号与 properties 配置格式不同因为 properties 配置格式都是字符串类型所以从等号后面的第一个非空格字符开始就会被当成是字符串。
properties 配置格式
mykey1abcde
mykey2abcde
mykey3abcdeRestController
public class PropertiesController {Value(${mykey1})private String mykey1;Value(${mykey2})private String mykey2;Value(${mykey3})private String mykey3;RequestMapping(/getkey)public String getKey() {return mykey1 | mykey2 | mykey3;}
}yml 配置格式
string1: abcde
string2: abcde
string3: abcedRestController
public class YmlController {Value(${string1})private String string1;Value(${string2})private String string2;Value(${string3})private String string3;RequestMapping(/getymlkey)public String getKey() {return string1 | string2 | string3;}
}根据输出的内容可以看到yml 中表示字符串的方式有三种但是这三种方式又有一些区别。
string1: abc \n de
string2: abc \n de
string3: abc \n edRestController
public class YmlController {Value(${string1})private String string1;Value(${string2})private String string2;Value(${string3})private String string3;RequestMapping(/getymlkey)public String getKey() {System.out.println(string1);System.out.println(string2);System.out.println(string3);return string1 | string2 | string3;}
}可以看到没有引号和单引号的用法基本上是一样的但是双引号就会有区别没有引号和单引号会将字符串中的一些特殊符号进行转义使之呈现出跟字符串里面一样的内容而双引号则不会进行转义。
配置对象
yml 中不仅能配置一些基本的数据类型还可以配置对象。啊我没听错吧yml 配置格式还能配置对象没错你没听错我们 yml 就是这么厉害。那么在 yml 中如何配置对象呢
student:id: 123name: zhangsanage: 18类似上面的配置格式就是 yml 配置对象当然也可以使用行内写法跟上面的写法作用是一致的。
student1: {id: 234, name: lisi, age: 20}那么如何取出配置的对象呢这时候就不能使用 Value 注解了需要使用 ConfigurationProperties 注解并且取出也需要借助类来读取。
package com.example.springconfiguration;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;Data
Component
ConfigurationProperties(prefix student)
public class Student {private int id;private String name;private int age;
}
仅仅只是通过类来读取也是不行的还需要保证类中的属性名称和 yml 配置文件中的对象的属性名称一致并且类中为这些属性提供了 getter 和 setter 方法。
这是 ConfigurationProperties 注解的参数如果不指定参数的名称的话默认就是value/prefix。
package com.example.springconfiguration;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;RestController
public class StudentController {Autowiredprivate Student student;RequestMapping(/readStudent)public String readStudent() {return student.toString();}
} 配置集合
yml 配置文件还可以配置集合。
dbtypes:name:- mysql- sqlserver- db2读取 yml 配置文件中的集合同样是依赖 ConfigurationProperties 注解和类以及类中的 getter 和 setter 方法。
package com.example.springconfiguration;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.List;Component
ConfigurationProperties(prefix dbtypes)
Data
public class ListConfig {private ListString name;
}
package com.example.springconfiguration;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;RestController
public class ListController {Autowiredprivate ListConfig listConfig;RequestMapping(/readList)public String readList() {return listConfig.toString();}
} 配置Map
yml 配置格式还可以配置 Map 类型的属性。
maptypes:map:k1: Chinak2: Americak3: Japanese行内写法
maptypes2: {map: {k1: China, k2: America, k3: Japanese}}读取 Map 类型配置也是依赖 ConfigurationProperties 注解和类以及类中的 getter 和 setter 方法。
package com.example.springconfiguration;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.Map;Component
ConfigurationProperties(prefix maptypes)
Data
public class MapConfig {private MapString, String map;
}
package com.example.springconfiguration;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;RestController
public class MapController {Autowiredprivate MapConfig mapConfig;RequestMapping(/readMap)public String readMap() {return mapConfig.toString();}
} 设置不同环境的配置文件
有可能我们一个项目中针对不同的情况会有不同的配置那么我们是否要每到一个新环境就将另一个配置文件中的内容复制到当前使用的配置文件中吗其实没必要一个 Spring 项目中允许存在多个配置文件并且我们可以指定使用哪个配置文件。
但是需要注意的是spring 中的配置文件必须以 application-xxx.yml 格式命名。比如 application-dev.yml 和 application-prod.yml如果需要切换的话只需要在 application.yml 配置文件中加入
spring:profiles:active: dev # application-xxx.yml 这里填 - 后面的字符假设我们这里使用 application-dev.yml 配置文件。 YML优缺点
优点
易读性强YAML采用缩进和符号的方式表示层次结构使得配置文件易于阅读和理解。数据结构丰富YAML支持多种数据结构类型如标量、数组、映射等可以方便地表示各种数据结构。支持多语言YAML的语法简洁易于学习支持多种编程语言进行解析和读取。
缺点
错误易引入由于YAML的缩进规则严格如果缩进不一致或者符号使用不当会导致解析错误。安全性问题由于YAML易于阅读和编写可能存在被篡改的风险。在安全敏感的应用中需要采取额外的安全措施。依赖外部库在某些编程语言中需要依赖特定的第三方库才能解析和读取YAML文件。这可能会增加开发者的负担。