SpringBoot设置文件

打印 上一主题 下一主题

主题 980|帖子 980|积分 2940

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之间是以“=”连接的
举例:
  1. # 配置项⽬端⼝号
  2. server.port=8080
  3. #配置数据库连接信息
  4. spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb? characterEncoding=utf8&useSSL=false
  5. spring.datasource.username=root
  6. spring.datasource.password=root
复制代码
@Value注解

@ Value注解可以将 application.properties / application.yml文件中的设置信息注入或者绑定到java对象的属性上。
语法格式:@Value(“${key}”)
举例:
  1. mykey.key1 = bite
复制代码
  1. @RestController
  2. public class PropertiesController {
  3. @Value("${mykey.key1}")
  4. private String key1;
  5. @RequestMapping("/key")
  6. public String key(){
  7. return "读取到值:"+key1;
  8. }
  9. }
复制代码
输出结果

用@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利用一个空格来分隔属性名和属性值, 用换行+空格来表现层级关系 例如:
  1. server:
  2.   port: 9090
复制代码

  • 注意不能利用tab,必须是空格,空格数量无要求,大部分建议2个或4个空格
  • 同级元素左对齐
    例如


  • 在一个映射中,键必须是唯一的。
  • 利用#进行注释。
  • 大小写敏感
yml设置的读取

yml读取设置的方式properties相同,利用@Value注解
yml设置对象

  1. student:
  2. id: 1
  3. name: Java
  4. age:15
复制代码
要利用另⼀个注解@ConfigurationProperties 来读取
  1. @ConfigurationProperties(prefix = "student")
  2. @Component
  3. @Data
  4. public class Student {
  5. private int id;
  6. private String name;
  7. private int age;
  8. }
复制代码
调用类
  1. @RestController
  2. public class StudentController {
  3. @Autowired
  4. private Student student;
  5. @RequestMapping("/readStudent")
  6. public String readStudent(){
  7. return student.toString();
  8. }
  9. }
复制代码
设置集合

  1. dbtypes:
  2. name:
  3.   -mysql
  4.   -sqlserver
  5.   -db2
复制代码
  1. @Component
  2. @ConfigurationProperties("dbtypes")
  3. @Data
  4. public class ListConfig {
  5. private List<String> name;
  6. }
复制代码
  1. @RestController
  2. public class ReadYml2 {
  3. @Autowired
  4. private ListConfig listConfig;
  5. @RequestMapping("/readList")
  6. public String readList(){
  7. return listConfig.toString();
  8. }
  9. }
复制代码
设置Map

  1. maptypes:
  2.   map:
  3.     k1: kk1
  4.     k2: kk2
  5.     k3: kk3
复制代码
  1. @Component
  2. @ConfigurationProperties("maptypes")
  3. @Data
  4. public class MapConfig {
  5. private HashMap<String,String> map;
  6. }
复制代码
  1. @RestController
  2. public class ReadYml2 {
  3. @Autowired
  4. private MapConfig mapConfig;
  5. @RequestMapping("/readMap")
  6. public String readStudent(){
  7. return mapConfig.toString();
  8. }
  9. }
复制代码
小细节


  • 普通文本可以利用单引号或双引号括起来
    单引号括起来:单引号内全部的内容都被当做普通文本,不转义(例如字符串中有\n,则\n被当做普通的字符串
    双引号括起来:双引号中有\n则会被转义为换行符
  • 保留文本格式
    将文本写到这个符号 | 的下层,会主动保留格式。
  • 文档切割
    ----这个符号下面的设置可以以为是一个独立的yml文件。便于巨大文件的阅读。
优缺点

长处:

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

  • 不适合写复杂的设置文件
  • 对格式有较强的要求

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表