SpringBoot配置文件是什么?该如何使用?(二)

简介: SpringBoot配置文件是什么?该如何使用?(二)

六、语法介绍

YAML(YAML Ain't Markup Language),一种数据序列化格式。具有容易阅读、容易与脚本语言交互、以数据为核心,重数据轻格式的特点。常见的文件扩展名有两种:


.yml格式(主流)


.yaml格式


对于文件自身在书写时,具有严格的语法格式要求,具体如下:


大小写敏感

属性层级关系使用多行描述,每行结尾使用冒号结束

使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)

属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

#号 表示注释

上述规则不要死记硬背,按照书写习惯慢慢适应,并且在Idea下由于具有提示功能,慢慢适应着写格式就行了。核心的一条规则要记住,数据前面要加空格与冒号隔开


下面列出常见的数据书写格式,熟悉一下


boolean: TRUE        #TRUE,true,True,FALSE,false,False均可
float: 3.14          #6.8523015e+5  #支持科学计数法
int: 123              #0b1010_0111_0100_1010_1110    #支持二进制、八进制、十六进制
null: ~              #使用~表示null
string: HelloWorld          #字符串可以直接书写
string2: "Hello World"      #可以使用双引号包裹特殊字符
date: 2018-02-17            #日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00 #时间和日期之间使用T连接,最后使用+代表时区


此外,yaml格式中也可以表示数组,在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔


subject:
  - Java
  - 前端
  - 大数据
enterprise:
  name: itcast
    age: 16
    subject:
      - Java
        - 前端
        - 大数据
likes: [王者荣耀,刺激战场]    #数组书写缩略格式
users:        #对象数组格式一
  - name: Tom
    age: 4
  - name: Jerry
    age: 5
users:        #对象数组格式二
  -  
    name: Tom
    age: 4
  -   
    name: Jerry
    age: 5       
users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ] #对象数组缩略格式



现在我们已经知道了yaml具有严格的数据格式要求,并且已经可以正确的书写yaml文件了,那这些文件书写后其实是在定义一些数据。这些数据时给谁用的呢?大部分是SpringBoot框架内部使用,但是如果我们想配置一些数据自己使用,能不能用呢?答案是可以的,那如何读取yaml文件中的数据呢?


七、数据读取

对于yaml文件中的数据,其实你就可以想象成这就是一个小型的数据库,里面保存有若干数据,每个数据都有一个独立的名字,如果你想读取里面的数据,肯定是支持的,下面就介绍3种读取数据的方式


为了方便测试,先看看我在配置文件中写的测试数据内容

image.png


1、读取单一数据

yaml中保存的单个数据,可以使用Spring中的注解直接读取,使用@Value可以读取单个数据,属性名引用方式:${一级属性名.二级属性名……}


写一个代码测试一下:


@RestController
@RequestMapping("/books")
public class BookController {
    //yml读取单一数据
    @Value("${country}")
    private String country;
    //对象的某个属性值
    @Value("${user1.name}")
    private String name;
    //普通数组的某个值
    @Value("${hobby[0]}")
    private String hobby;
    //对象数组的某个属性的值
    @Value("${users[0].name}")
    private String age;
    @GetMapping("/getBooks")
    public String getBooks() {
        System.out.println("SpringBoot 正在运行~");
        System.out.println("单一数据country是:" + country);
        System.out.println("对象的某个属性值是:" + name);
        System.out.println("普通数组的某个值是:" + hobby);
        System.out.println("对象数组的某个属性的值是:" + age);
        return "Hello,SpringBoot is  running";
    }
}



运行结果完全正确!

image.png


2、读取全部数据

读取单一数据可以解决读取数据的问题,但是如果定义的数据量过大,这么一个一个书写肯定会累死人的,SpringBoot提供了一个对象,能够把所有的数据都封装到这一个对象中,这个对象叫做Environment,使用自动装配注解可以将所有的yaml数据封装到这个对象中


@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private Environment environment;
    @GetMapping("/getBooks")
    public String getBooks() {
        System.out.println("SpringBoot 正在运行~");
        System.out.println("单一数据country是:" + environment.getProperty("country"));
        System.out.println("对象的某个属性值是:" + environment.getProperty("user1.name"));
        System.out.println("普通数组的某个值是:" + environment.getProperty("hobby[0]"));
        System.out.println("对象数组的某个属性的值是:" + environment.getProperty("users[0].age"));
        return "Hello,SpringBoot is  running";
    }
}



运行结果也是完全正确的!

image.png

注意:Environment对应的包不要导错了。是org.springframework.core.env.Environment包下的


3、读取对象数据

单一数据读取书写比较繁琐,全数据封装又封装的太厉害了,每次拿数据还要一个一个的getProperties(),总之用起来都不是很舒服。由于Java是一个面向对象的语言,很多情况下,我们会将一组数据封装成一个对象。SpringBoot也提供了可以将一组yaml对象数据封装一个Java对象的操作


首先定义一个对象,并将该对象纳入Spring管控的范围,也就是定义成一个bean,然后使用注解@ConfigurationProperties指定该对象加载哪一组yaml中配置的信息。


@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private User1 user1;
    @GetMapping("/getBooks")
    public String getBooks() {
        System.out.println("SpringBoot 正在运行~");
        System.out.println(user1);
        return "Hello,SpringBoot is  running";
    }
}


这个@ConfigurationProperties必须告诉他加载的数据前缀是什么,这样当前前缀下的所有属性就封装到这个对象中。记得数据属性名要与对象的变量名一一对应啊,不然没法封装。其实以后如果你要定义一组数据自己使用,就可以先写一个对象,然后定义好属性,下面到配置中根据这个格式书写即可。


运行结果依然是正确的!

image.png


4、数据引用

在书写yaml数据时,经常出现如下现象,比如很多个文件都具有相同的目录前缀


center:
  dataDir: /usr/local/fire/data
    tmpDir: /usr/local/fire/tmp
    logDir: /usr/local/fire/log
    msgDir: /usr/local/fire/msgDir


或者


center:
  dataDir: D:/usr/local/fire/data
    tmpDir: D:/usr/local/fire/tmp
    logDir: D:/usr/local/fire/log
    msgDir: D:/usr/local/fire/msgDir


这个时候就可以使用引用格式来定义数据,其实就是搞了个变量名,然后引用变量了,格式如下:


baseDir: /usr/local/fire
    dataDir: ${baseDir}/data
    tmpDir: ${baseDir}/tmp
    logDir: ${baseDir}/log
    msgDir: ${baseDir}/msgDir


注意事项:在书写字符串时,如果需要使用转义字符,需要将数据字符串使用双引号包裹起来


lesson: "Spring\tboot\nlesson"


小结


在配置文件中可以使用${属性名}方式引用属性值

如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析

八、总结

SpringBoot配置文件的使用也同样简化了开发的步骤,非常重要,我们要熟练使用。博主正在积极准备SpringBoot整合第三方技术相关的博客文章,喜欢的话,可以给博主一个赞哦~~


相关文章
|
3月前
|
Java 容器
SpringBoot读取resources下的文件以及resources的资源路径
SpringBoot读取resources下的文件以及resources的资源路径
81 0
|
3月前
|
Java
SpringBoot文件上传单文件多文件上传
SpringBoot文件上传单文件多文件上传
30 0
|
21天前
|
存储 前端开发 Java
SpringBoot使用云端资源url下载文件的接口写法
在Spring Boot中实现从云端资源URL下载文件的功能可通过定义REST接口完成。示例代码展示了一个`FileDownloadController`,它包含使用`@GetMapping`注解的方法`downloadFile`,此方法接收URL参数,利用`RestTemplate`下载文件,并将文件字节数组封装为`ByteArrayResource`返回给客户端。此外,通过设置HTTP响应头,确保文件以附件形式下载。这种方法适用于从AWS S3或Google Cloud Storage等云服务下载文件。
124 7
|
5天前
|
JavaScript 前端开发 easyexcel
基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程
本文展示了基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的完整过程,包括后端使用EasyExcel生成Excel文件流,前端通过Blob对象接收并触发下载的操作步骤和代码示例。
29 0
基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程
|
1天前
|
存储 Java API
SpringBoot + MinIO 实现文件切片极速上传技术
【8月更文挑战第19天】在现代互联网应用中,文件上传是一个常见且重要的功能。然而,随着文件体积的增大,传统的文件上传方式往往面临效率低下、耗时过长等问题。为了提升大文件上传的速度和效率,我们可以采用文件切片上传技术,并结合SpringBoot和MinIO来实现这一功能。
9 0
|
6天前
|
Java
Java SpringBoot FTP 上传下载文件
Java SpringBoot FTP 上传下载文件
12 0
|
6天前
|
JavaScript Java
SpringBoot 下载文件
SpringBoot 下载文件
13 0
|
19天前
|
存储 运维 Java
SpringBoot使用log4j2将日志记录到文件及自定义数据库
通过上述步骤,你可以在Spring Boot应用中利用Log4j2将日志输出到文件和数据库中。这不仅促进了良好的日志管理实践,也为应用的监控和故障排查提供了强大的工具。强调一点,配置文件和代码的具体实现可能需要根据应用的实际需求和运行环境进行调优和修改,始终记住测试配置以确保一切运行正常。
102 0
|
2月前
|
前端开发 安全 Java
实现Spring Boot中的文件分片上传通常涉及到以下几个步骤和考虑的关键点
实现Spring Boot中的文件分片上传通常涉及到以下几个步骤和考虑的关键点
69 2
|
3月前
|
安全 JavaScript Java
springboot实现文件防盗链设计
`shigen`,一位专注于Java、Python、Vue和Shell的博主,分享成长和技术。近期将探讨SpringBoot实现图片防盗链,通过限制`Referer`防止资源被盗用。基础版通过`WebMvcConfigurer`配置静态资源,升级版添加拦截器检查`Referer`,确保请求来源合法性。详细代码实现和案例可在文中链接找到。一起学习,每天进步!
91 14
springboot实现文件防盗链设计