SpringBoot设置文件
设置文件的作用
设置文件主要是为了办理硬编码带来的问题,把大概会发生改变的信息,放在一个集中的地方,当我们启动某个步调时,应用步调从设置文件中读取数据,并加载运行。
硬编码是将数据直接嵌入到步调或其他可执行对象的源代码中,也就是我们常说的“代码写死”。
比如手机字体大小
如果采用硬编码的方式,就直接在步调中指定字体大小,全部的用户利用的都是同一个字体大小
但是不同的用户有不同的偏好,我们可以把手机字体的大小放在设置文件中,当步调启动时,读取设置,以用户设置的字体大小来表现。
利用设置文件,可以使步调完成用户和应用步调的交互,或者应用步调与其他应用步调的交互
了解外部化设置
外部化设置:将设置信息存储在应用代码步调之外的地方
比如打了jar包发现Application.prperties不在jar包里,就可以分析Springboot的设置文件是外部化设置
SpringBoot的应用步调默认先去找外部化设置
长处:方便了设置的修改,并且修改后不需要重新编译代码,也不需要重新部署项目。
SpringBoot支持多种外部化设置:
- properties文件
- yml或者yaml文件
- 体系环境变量
- 命令行参数…
设置文件的格式
Spring Boot设置文件有以下三种:
application. properties
application. yml
application. yaml
yml为yaml的简写,实际开辟中出现频率最高. yaml和yml的利用方式一样
设置文件加载优先级
Spring Boot框架在启动时会实行从以下位置加载 application.
- file:./ config/: 起首在Spring Boot当前工作目录下的 config 文件夹中查找 application. properties,如果没有找到,会继续找 application. yml, 如果这两个都没有找到,才会进入以下位置查找,以此类推。
- file: ./:如果在当前工作目录下 config 目录中找不到时,再从当前工作目录中查找。
- classpath:/config/:如果从工作目录中找不到,会从类路径中找,先从类路径的 /config/ 目录下探求设置文件。
- classpath:/: 如果在 / config/ 下没有找到,它会在类路径的根目录下查找。
如果你想要指定其他的设置文件位置或者改变默认的行为,可以通过打jar包之后运行命令行 java -jar XXX.jar --spring. config. location=后跟路径的方式(绝对路径且注意前面有/)来指定设置文件的详细位置。
application. properties 设置文件是SpringBoot框架默认的设置文件
application. properties 不是必须的, SpringBoot对于应用步调来说,都提供了一套默认设置(就是我们所说的主动设置)
如果你要改变这些默认的行为,可以在 application. properties文件中进行设置。
比如说改端标语,SpringBoot内置了Tomcat服务器,默认端号是8080,大概默认端口别占用,就需要改端标语
application.properties
基本语法
properties是以键值的形式设置的, 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注解
@ Value注解可以将 application.properties / application.yml文件中的设置信息注入或者绑定到java对象的属性上。
语法格式:@Value(“${key}”)
举例:
- @RestController
- public class PropertiesController {
- @Value("${mykey.key1}")
- private String key1;
- @RequestMapping("/key")
- public String key(){
- return "读取到值:"+key1;
- }
- }
复制代码 输出结果
用@Value注解的时候,如果这个key不存在,并且没有指定默认,则报错
缺点分析
从上述设置key看出,properties设置文件中会有很多的冗余的信息
想要办理这个问题,就可以利用yml设置文件的格式化
application.yml
YML概述
YAML (YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,它通常用于设置文件,在各种编程语言中作为一种存储或传输数据的方式。
YAML的设计目的是易于阅读和编写,同时保持充足的表达本领来表现复杂的数据布局。
YAML文件的扩展名可以是. yaml 或 . yml .
常见的数据存储和互换格式
properties 、 XML 、JSON 、 YAML 这几种格式是用来存储和互换数据的常见方式
但它们各有特点和适用场景:
Properties
这种格式主要用于 Java应用步调中的设置文件。它是键值对的形式,每一行是一个键值对,利用等号或冒号分隔键和值。
特点是简单易懂,但在处理复杂布局的数据时显得力有未逮。
XML
XML是一种标记语言,用来形貌数据的格式。它支持复杂的数据布局,包括嵌套和属性。
XML文档具有精良的布局化特性,适合传输和存储布局化的数据。但是,XML文档通常体积较大,解析起来也比力耗资源。
JSON
JSON是一种轻量级的数据互换格式,易于人阅读和编写,同时也易于机器解析和天生。它基于JavaScript的一个子集,支持多种数据类型,如数字、字符串、布尔值、数组和对象。
JSON由于简洁和高效而广泛应用于Web应用步调之间进行数据互换。
YAML
YAML设计的目的之一就是让人类更容易阅读。它支持雷同JSON的数据序列化,但提供了更多的机动性,例如缩进来表现数据布局。
YAML非常适合用来编写设置文件,由于它答应以一种自然的方式构造数据,并且可以包含注释和其他人类可读的元素。
总结来说,这四种格式都可以用来存储和互换数据,但它们的设计初衷和最佳利用场景有所不同。选择哪种格式取决于详细的应用需求、数据复杂度、性能要求等因素。
yml的语法规则
1.YAML支持多种数据类型,包括字符串、数字、布尔值、数组、list集合、map键值对等。 2. YAML利用一个空格来分隔属性名和属性值, 用换行+空格来表现层级关系 例如:
- 注意不能利用tab,必须是空格,空格数量无要求,大部分建议2个或4个空格
- 同级元素左对齐
例如
- 在一个映射中,键必须是唯一的。
- 利用#进行注释。
- 大小写敏感
yml设置的读取
yml读取设置的方式properties相同,利用@Value注解
yml设置对象
- student:
- id: 1
- name: Java
- age:15
复制代码 要利用另⼀个注解@ConfigurationProperties 来读取
- @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();
- }
- }
复制代码 设置集合
- dbtypes:
- name:
- -mysql
- -sqlserver
- -db2
复制代码- @Component
- @ConfigurationProperties("dbtypes")
- @Data
- public class ListConfig {
- private List<String> name;
- }
复制代码- @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
复制代码- @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();
- }
- }
复制代码 小细节
- 普通文本可以利用单引号或双引号括起来
单引号括起来:单引号内全部的内容都被当做普通文本,不转义(例如字符串中有\n,则\n被当做普通的字符串)
双引号括起来:双引号中有\n则会被转义为换行符
- 保留文本格式
将文本写到这个符号 | 的下层,会主动保留格式。
- 文档切割
----这个符号下面的设置可以以为是一个独立的yml文件。便于巨大文件的阅读。
优缺点
长处:
- 可读性高,写法简单,易于理解
- 支持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态。
- 支持更多的编程语言,不止是Java中可以利用,在Golang, Python, Ruby,JavaScript中也可以利用
缺点:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |