Springboot系列-理解application.properties和application.yaml_spingtboot的是application.properties 而不是yaml-程序员宅基地

技术标签: springboot系列  properties  yaml  

Springboot系列-理解application.properties和application.yaml

前言:学过或者使用过springboot框架的时候,大家会发现,springboot中的配置文件有两种方式,分别是.properties格式和.yaml格式,这两个都是配置文件,但是他们有什么不同呢?

application.properties

1.位置问题

创建Spring Boot项目时,默认 resources 目录下就有一个application.properties 文件,可以在 application.properties 文件中进行项目配置,但是这个文件并非唯一的配置文件,在 Spring Boot 中,一共有 4 个地方可以存放该配置文件,并按照如下优先级依次降低,如下:

  1. 当前项目根目录的config下
  2. 当前项目根目录下
  3. resource目录的config目录下
  4. resource目录下

在这里插入图片描述

springboot项目启动时,默认会从如上四个位置依次查找配置文件属性并加载,但是我们也可以自定义配置文件位置,如:在resource目录下创建一个test目录,test目录下创建一个application.properties配置文件,但这个文件不会自动加载,这就需要我们通过spring.config.location去指定配置文件位置,此时启动项目,项目将以 classpath:/test/application.properties 配置文件启动如下:

在这里插入图片描述

启动springboot项目,运行结果如下:
在这里插入图片描述

2.文件名问题

到这里可能就会有人发出疑问了,配置文件一定要是application.properties吗?我们知道配置文件后缀名properties是必须的,其实application其实是可以换的,但是因为在springboot项目中默认加载名为application,所以我们默认都写application,那如何更换名字呢?

如:我们在resource目录下创建一个叫loadme.properties文件,然后在IEDA配置中去指定:

在这里插入图片描述

指定完成后,启动项目系统还是会从上面四个位置依次查找,不过是以loadme.properties名字进行查找,也就是配置文件可以自定义配置,只需要spring.config去指定配置

3.普通属性注入

springboot源于spring,所以在springboot项目中属性注入依然存在,springboot 项目中,默认会自动加载 application.properties 文件,所以简单的属性注入可以直接在这个配置文件中写

one.定义一个student类:

public class Student {
    
 
     private String userId;
     private String userName;
     private String sex;
     
}

two.在 application.properties 文件中定义属性

student.userId=9527
student.userName=王小帅
student.sex=

three.直接通过 @Value 注解将这些属性注入到 Student对象中

@Component
public class Student {
    

    @Value("${student.userId}")
    private String userId;
    @Value("${student.userName}")
    private String userName;
    @Value("${student.sex}")
    private String sex;

}

four.Student对象本身也要交给 Spring 容器去管理,如果 Student 没有交给 Spring 容器,那么 Student 中的属性也无法从 Spring 容器中获取到值;配置完成后,可以选择在 Controller 中注入 Student 对象,启动项目,就可以看到属性已经注入到对象中,如:
在这里插入图片描述
在这里插入图片描述
etc:一般来说们需要在resource目录下创建一个新的student.properties配置文件从而避免影响application.properties系统配置文件,student.properties和上面一样:

student.userId=9527
student.userName=王小帅
student.sex=

此时,项目启动并不会自动的加载该配置文件,如果是在 XML 配置中,可以通过如下方式引用该 properties 文件:

<context:property-placeholder location="classpath:student.properties"/>

如果是在 Java 配置中,可以通过 @PropertySource 来引入配置:

@Component
@PropertySource("classpath:student.properties")
public class Student{
    
    @Value("${student.userId}")
    private String userId;
    @Value("${student.userName}")
    private String userName;
    @Value("${student.sex}")
    private String sex;

当然这是 Spring 中属性注入的一个简单用法,和 Spring Boot 没有任何关系

4.类型安全 属性注入

Spring Boot 引入了类型安全的属性注入,如果采用 Spring 中的配置方式,当配置的属性非常多的时候,工作量大,容易出错,所以我们采用类型安全的属性注入来解决该问题,如下:

@Component
@PropertySource("classpath:student.properties")
@ConfigurationProperties(prefix = "student")

public class Student{
    
    private String userId;
    private String userName;
    private String sex;
    
    //省略getter/setter
}

引入 @ConfigurationProperties(prefix = “student”) 注解,配置了属性的前缀,此时会自动将 Spring 容器中对应的数据注入到对象对应的属性中,避免通过 @Value 注解依次注入了,减少工作量并且避免出错


yaml

鉴于我们上面说了properties的理解之后,实际也包含了yaml一大部分特性,两者其实相差不大,但还是有所区别,接下来我们主要说下相对于properties,yaml特有的属性

代码风格

properties语法:

server.port = 8080
server.address=127.0.0.1
server.servlet.context-path=/test

yml语法:

server:
  port: 8080
  servlet:
    context-path: /test

xml语法:

<server>
 <port>8081</port>
</server>

使用yml注意:

  • 不同“等级” 用冒号隔开
  • 次等级的前面是空格,不能使用制表符(tab)
  • 冒号之后如果有值,那么冒号和值之间至少有一个空格,避免紧贴
  • 要么用application.properties 要么用 application.yml,不要都用使自己混乱

总体来说,yaml不同于 properties 文件的无序,yaml 配置有序,这一点在有些配置中是非常有用的,例如在 Spring Cloud Zuul 的配置中,当我们配置代理规则时,顺序就显得尤为重要 ; 当然 yaml 配置也不是万能的,例如,yaml 配置目前不支持 @PropertySource 注解等。

结语:对于springboot项目中的两个配置文件介绍就到这了,以上论述可能有些朋友对yml与yaml不太理解,其实这个对于使用上没有什么大的影响,详细想要了解的话点击这里

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangxinyao1997/article/details/103232944

智能推荐

<script type="text/html"></script> js模版使用_"<script type=\"text/html\" 引入样式"-程序员宅基地

文章浏览阅读4.9k次。1 2 3 4 1.首先这种写,在页面渲染的时候,浏览器不会读取script标签中的html代码2.外面不能获取到里面的div节点所以: 在使用时,要在script标签上加个ID可以供我们找到它, 即然做模版用,且里面的html代码不会被_"

规则引擎的介绍与Drools的流程分析_有限状态机 规则引擎-程序员宅基地

文章浏览阅读2k次。规则引擎(RuleEngine)是一个有限状态机,通过入参实现状态转移,在Java中定义为JSR94规范。规则引擎目前的开源实现主要是JBoss家族的Drools,采用友好的Apache协议(意味着可以作为商业产品)。以及据说非常贵的ILOG引擎,还有一些国内引擎。1. 规则引擎的简介规则引擎一般用于处理请求报文总类繁多,业务控制复杂的场景,比如某个订单入口,某个网络的控制域,某个路由,比如_有限状态机 规则引擎

Java--JSON嵌套JSON中带‘\‘字符的解决方式_java json字符串中的\-程序员宅基地

文章浏览阅读1.4w次,点赞11次,收藏12次。最近在开发中遇到了这么一个问题,我在构造一个Json字符串的时候,由于这个JSON字符串的一个属性本身也是一个JSON字符串,所以在转换成字符串的时候这个子JSON字符串中就带了'\'反斜杠字符。导致后面传参发送到接收方识别不了。由于我不想通过处理JSON字符串(直接把\替换成空串),而是直接传进来就是正常的。经过一系列的尝试,终于将其解决。一、问题复现: //子json串..._java json字符串中的\

论文阅读——CMT_cmt 视觉架构-程序员宅基地

文章浏览阅读879次,点赞28次,收藏21次。本文提出了一种新的混合结构CMT,用于视觉识别和其他下游计算机视觉任务,如目标检测和实例分割,并解决了在计算机视觉领域以野蛮力方式使用变压器的局限性。所提出的CMT结构利用cnn和变压器来捕获局部和全局信息,提高了网络的表示能力。_cmt 视觉架构

mxnet通过模型的json文件和params文件导出模型的结构图_params json 怎么生成模型-程序员宅基地

文章浏览阅读2.8k次。导读有时候我们需要导出网络的结构图,来了解网络的结构和网络的输入输出节点等信息导出网络结构图通过mxnet模型的json文件和params文件可以很容易的导出模型的结构图,代码如下下载模型的json文件和params文件这里我们以ResNet-18网络结构为例,通过下面的代码先下载需要的文件import mxnet as mxdef download_model(): pa..._params json 怎么生成模型

android RGB颜色值调节亮度,饱和度,色调;hsv与rgb转化。_android rgb 亮度 饱和度-程序员宅基地

文章浏览阅读1.4w次,点赞6次,收藏46次。android RGB颜色值调节亮度,饱和度,色调好久没写博客了,最近在做一个物联网的项目其中涉及到控制七彩灯设备,要求可以调节灯光的颜色,包括亮度,饱和度,色调,刚开始做这个七彩灯的时候也不知道16进制的rgb怎么能调节亮度,饱和度,色调。那只有百度上搜喽。推荐两个博客第一个第二个;这两个看完基本也就了解的差不多了。下面我就结合我的项目来说说怎么hsv与rgb之间互相转化。主要用到的就是..._android rgb 亮度 饱和度

随便推点

C++ 控制台项目调用带有界面的dll mfc库(亲测可用)-程序员宅基地

文章浏览阅读447次。默认生成的类没有添加mfc头文件,记得自己在头文件添加以下两行。之后创建一个界面,右键资源文件,添加资源,选择Dialog。修改mfcdll.h和mfcdll.cpp。第二步右键解决方案创建一个mfc动态库。之后在这个类名前添加关键字静态导出。右键项目编译,生成静态库和动态库。添加mfcdll动态库路径。新建mfcEmu.cpp。控制台项目修改项目属性。第一步创建一个空项目。新建main.cpp。

CVE-2015-1805漏洞解析及验证_cve 2015-程序员宅基地

文章浏览阅读1.9k次。转载自:https://www.anquanke.com/post/id/836820x0 漏洞信息影响所有Nexus手机和部分Android手机的漏洞,Google于2016/03/18发布了公告修复,具体请看链接.http://www.cvedetails.com/cve-details.php?t=1&amp;cve_id=cve-2015-1805Xhttp://source.andro..._cve 2015

ODBC错误码_安装mentor的odbc驱动显示sql状态=s1000-程序员宅基地

文章浏览阅读4.2k次。ODBC错误信息分类: Develop 2005-03-02 09:28 8541人阅读 评论(2)收藏 举报sql server服务器数据库sqlnullimODBC 错误信息根据 X/Open 和 SQL Access Group SQL CAE 规范 (1992) 所进行的定义,SQLERROR 返回 SQLSTATE 值。SQLSTATE 值是包_安装mentor的odbc驱动显示sql状态=s1000

VScode报错:undefined reference to ‘WinMain’ collect2.exe: error: ld returned 1 exit status-程序员宅基地

文章浏览阅读3.1k次,点赞8次,收藏3次。mingw32/lib/…/lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x2e): undefined reference to `WinMain’collect2.exe: error: ld returned 1 exit status因为VScode不是你Run代码就会自动保存,需要你先保存代码Ctrl+s,之后再运行即可。...

切换用户命令(sudo,su,exit)_退出,sudo su-程序员宅基地

文章浏览阅读5.8k次,点赞2次,收藏4次。在普通用户权限下,Linux 的很多命令都是不能使用的,一般在/sbin 和/usr/sbin 目录下的命令,其执行都需要 root 权限。sudo 命令可以临时获取 root 权限,需要输入密码。用法:$ sudo 命令..._退出,sudo su

Abaqus液体中气液两相的气泡仿真_abaqus流体仿真-程序员宅基地

文章浏览阅读1.1w次,点赞20次,收藏63次。前言: 最近,导师有要求去做Abaqus的液体气泡仿真,接到任务时才发现,Abaqus资料真的是很少,自己对有限元分析之前又是一穷二白,0接触,所以对我来说真的是一个坑。对于这个软件发现大多数都不是做这个欧拉仿真的,某宝上买的教程也是毫无涉及这个方面的内容。简单学习了下这个软件的使用构想,就草草上手,一路坎坷。同时浏览了国外的教程,资料也是很少,YoutuBe上难以找到相关内容及教..._abaqus流体仿真