配置文件-yaml

在spring Boot开发中推荐使用yaml来作为配置文件。

基本语法:

  • key: value;kv之间有空格

  • 大小写敏感

  • 使用缩进表示层级关系

  • 缩进不允许使用tab,只允许空格

  • 缩进的空格数不重要,只要相同层级的元素左对齐即可

  • '#'表示注释

  • 字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义

数据类型:

可以使用的数据类型有date\boolean\string\number\null

  1. 单个字面量:

    k: v   #k:空格v
  2. 对象,键值对的集合,包括:map、hash、set、object

    • 普通写法:

      k:
      k1: v1
      k2: v2
      k3: v3
    • 行内写法

      k: {k1: v1,k2: v2,k3: v3}
  3. 数组:一组按次序排列的值。array、list、queue

    • 普通写法:

      k:
      - v1
      - v2
      - v3
    • 行内写法

      k: [v1,v2,v3]

编写之前,我需要配置yaml中的提示插件:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

如果在打包的时候不需要打包该插件,可以在插件中设置如下:

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>

安装完成后,需要启动一下项目,让他生效。

实例:

Person类:

@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String userName;
private Boolean boss;
private Date birth;
private Integer age;
private Pet pet;
private String[] interests;
private List<String> animal;
private Map<String, Object> score;
private Set<Double> salarys;
private Map<String, List<Pet>> allPets;
}

Pet类:

@Data
public class Pet {
private String name;
private Double weight;
}

在recources资源目录下创建application.yaml文件,使用yaml表示上述的属性:

person:
user-name: xbhog
boss: false
birth: 2021/7/27
age: 18
pet: {name: 阿毛,weight: 23}
interests: [唱歌,跳舞,玩游戏]
animal:
- jerry
- mario
score:
english: 30
math: 70
#第二种写法:score: {english: 30,math: 70}
salarys:
- 277
- 8999
- 10000
all-pets: #该allPet有两个k(sick、health),每个key包含一个list
sick:
- {name: tom}
- {name: jerry,weight:47}
health: [{name: mario,weight: 47}]

创建一个controller来测试我们的配置文件有没有生效:

因为我们之前已将将person中的属性映射到了application.yaml文件中,并且把person加入到容器中。

@Component
@ConfigurationProperties(prefix = "person")

所以我们在myconfig中做测试:

package com.xbhog.controller;

import com.xbhog.popj.Car;
import com.xbhog.popj.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class MyController {
@Autowired //自动配置,找到容器中的person
Person person; @RequestMapping("/person")
public Person person(){
return person;
}
}

结果如图所示:

Web开发之简单功能分析

静态资源的访问问题

只有静态资源放在以下的文件目录中才可以:

/static/、public/、 resources/ 、META-INF/resources

最后一个测试没有成功,访问META-INF/resources/img.png返回404,如果有感兴趣的小伙伴可以测试一下。

访问的方法是:当前项目根路径/ + 静态资源名 (localhost:8080/xxx.img)

假如我们的请求路由跟图片的名字重复了,spring boot是先请求哪个呢?

我们创建一个controller:

package com.xbhog.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class mycontro {
@RequestMapping("/publicimg.png")
public String demo(){
return "asss";
}
}

让它与public文件夹下面的图片相同:

开启主程序测试结果如下:

当我们随便请求一个不存在的图片,会返回给我们404.

从上面可以看出来,请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面

改变默认的静态资源的路径:

在application.yaml文件中:

spring:
mvc:
static-path-pattern: /res/**

这样我们访问资源的时候必须啊要加res前缀.

但是在欢迎页支持和自定义Favicon上需要关掉·tatic-path-pattern.如果开启的话,index.html与favicon是不起效果的。

如果设置favicon设置的完后,不起作用,可以禁用下浏览器缓存或者重启下idea.

设置的方式(直接放到静态资源文件夹下即可):

直接访问localhost:8080即可看见

参考:

尚硅谷视频

结束:

如果你看到这里或者正好对你有所帮助,希望能点个关注或者推荐,感谢;

有错误的地方,欢迎在评论指出,作者看到会进行修改。

SpringBoot之yaml语法及静态资源访问的更多相关文章

  1. 聊聊、SpringBoot 静态资源访问

    SpringBoot 1.X 版本和 SpringBoot 2.X 版本在静态资源访问上有一些区别,如果直接从 1.X 升级到 2.X 肯定是有问题的.这篇文章就来讲讲这方面问题,也是项目中的坑. 先 ...

  2. SpringBoot静态资源访问+拦截器+Thymeleaf模板引擎实现简单登陆

    在此记录一下这十几天的学习情况,卡在模板引擎这里已经是四天了. 对Springboot的配置有一个比较深刻的认识,在此和大家分享一下初学者入门Spring Boot的注意事项,如果是初学SpringB ...

  3. IntelliJ IDEA+SpringBoot中静态资源访问路径陷阱:静态资源访问404

    IntelliJ IDEA+SpringBoot中静态资源访问路径陷阱:静态资源访问404 .embody{ padding:10px 10px 10px; margin:0 -20px; borde ...

  4. springboot + thymeleaf静态资源访问404

    在使用springboot 和thtmeleaf开发时引用静态资源404,静态资源结如下: index.html文件: <!DOCTYPE html> <html xmlns:th= ...

  5. SpringBoot 常用配置 静态资源访问配置/内置tomcat虚拟文件映射路径

    Springboot 再模板引擎中引入Js等文件,出现服务器拒绝访问的错误,需要配置过滤器 静态资源访问配置 @Configuration @EnableWebMvc public class Sta ...

  6. springboot学习入门简易版四---springboot2.0静态资源访问及整合freemarker视图层

    2.4.4 SpringBoot静态资源访问(9) Springboot默认提供静态资源目录位置需放在classpath下,目录名需要符合如下规则 /static  /public  /resourc ...

  7. springboot 静态资源访问,和文件上传 ,以及路径问题

    springboot 静态资源访问: 这是springboot 默认的静态资源访问路径  访问顺序依次从前到后(http://localhost:8080/bb.jpg) spring.resourc ...

  8. springboot配置静态资源访问路径

    其实在springboot中静态资源的映射文件是在resources目录下的static文件夹,springboot推荐我们将静态资源放在static文件夹下,因为默认配置就是classpath:/s ...

  9. Spring Boot 静态资源访问原理解析

    一.前言 springboot配置静态资源方式是多种多样,接下来我会介绍其中几种方式,并解析一下其中的原理. 二.使用properties属性进行配置 应该说 spring.mvc.static-pa ...

随机推荐

  1. Linkerd 2.10(Step by Step)—2. 自动化的金丝雀发布

    通过结合 Linkerd 和 Flagger 来根据服务指标自动金丝雀(canary)发布,从而降低部署风险. Linkerd 2.10 中文手册持续修正更新中: https://linkerd.ha ...

  2. 升级 macOS Big Sur 差点丢了我多年的珍藏文件(夹)!!!

    原来升级 macOS Big Sur 过程中会转移根目录下的个人文件(夹). 春节期间升级了一下 macOS ,升级之前就比较担心丢数据,然而怕什么来什么.升级之后发现根目录下的个人文件(夹)都不见了 ...

  3. APP的闪退和无响应

    1.app闪退(crash,崩溃):程序异常退出不再运行 闪退的原因: a.程序内部逻辑错误(因算法或网络连接引起的异常,或是为捕捉到的错误) b.系统自身异常:一般自定ROM或刷机后比较常见 c.运 ...

  4. Linux CentOS 配置Yaf框架

    简介 Yaf框架想必大家都有所了解,它是一个开源的高性能的PHP框架 官网地址:https://www.php.net/manual/zh/book.yaf.php Yaf开发文档:https://w ...

  5. MySQL 最佳实践 —— 高效插入数据

    当你需要在 MySQL 数据库中批量插入数百万条数据时,你就会意识到,逐条发送 INSERT 语句并不是一个可行的方法. MySQL 文档中有些值得一读的 INSERT 优化技巧. 在这篇文章里,我将 ...

  6. MySQL:聊一聊数据库中的那些锁

    在软件开发中,程序在高并发的情况下,为了保证一致性或者说安全性,我们通常都会通过加锁的方式来解决,在 MySQL 数据库中同样有这样的问题,一方面为了最大程度的利用数据库的并发访问,另一方面又需要保证 ...

  7. LCD1602液晶显示模块的单片机驱动深入详解之硬件篇

    (本文以HD44780主控芯片的LCD1602为蓝本进行描述,其中的截图也来自HD44780数据手册,用户可自行搜索其datasheet,有部分整理网上的,但绝对要比你看到的要深入得多) 一.接口 L ...

  8. 对图数据库(Nebula)进行单元测试时的坑

    通过Nebula提供的Java Client完成代码开发后,使用JUnit对其进行单元测试,需要注意几点: 一.不确定性 1.Nebula创建图空间是异步实现的,Nebula将在下一个心跳周期内(默认 ...

  9. FastApi持续更新

    ​ FastAPI 框架,高性能,易于学习,高效编码,生产可用 官方文档: https://fastapi.tiangolo.com FastAPI 是一个用于构建 API 的现代.快速(高性能)的 ...

  10. 流程自动化RPA,Power Automate Desktop系列 - 不讲武德的Windows10内置应用

    简介 Power Automate Desktop 扩展Power Automate中的现有机器人流程自动化(RPA)功能,并使您能够自动化所有重复的桌面流程. 使用预生成的拖放操作或记录您自己的桌面 ...