03_SpringBoot项目配置

news2025/1/20 6:03:09

文章目录

  • SpringBoot项目配置
    • 0x01_properties格式配置文件
    • 0x02_yml格式配置文件
      • 配置对象类型数据
      • 配置集合类型
      • 配置数组类型
    • 0x03_properties和yml的区别
      • 优先级
      • 区别
    • 0x04_配置文件在项目中的位置
    • 0x05_bootstrap配置文件
    • 0x06_springboot项目结构

SpringBoot项目配置

SpringBoot默认读取项目下名字为application开头的 yml, yaml, properties这些格式。

Spring Initializer IDEA内置的插件创建的项目为例,在pom.xml文件中,会引入依赖的父工程:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.5</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

查看这个依赖:里面有resources标签中指定了配置文件的命名和格式:

    <resources>
      <resource>
        <directory>${basedir}/src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
          <include>**/application*.yml</include>
          <include>**/application*.yaml</include>
          <include>**/application*.properties</include>
        </includes>
      </resource>
      <resource>
        <directory>${basedir}/src/main/resources</directory>
        <excludes>
          <exclude>**/application*.yml</exclude>
          <exclude>**/application*.yaml</exclude>
          <exclude>**/application*.properties</exclude>
        </excludes>
      </resource>
    </resources>

必须是以application开头的文件,扩展名是yml或者yaml或者properties

0x01_properties格式配置文件

尝试在项目下的application.properties里修改端口号和项目上下文路径 :

怎么书写呢,需要参考Spring的官网:https://docs.spring.io/spring-boot/docs/current/reference/html/

找到Application Properties查看:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties

平时要养成读官方文档的习惯。如果是英文的也要尝试读。

比如要配置端口号和项目的上下文路径,那么需要找server相关的配置:

image-20221116204135044

其他同理.

server.port=8091
server.servlet.context-path=/test

此时将项目的端口号部署为8090,项目的上下文路径为/test,这里一定要在开头写/,并且不能再结尾写/,否则会报这个错:

ContextPath must start with '/' and not end with '/'

启动项目,访问controller

http://localhost:8091/test/testController4

发现配置生效。

0x02_yml格式配置文件

由properties格式转换成yml格式:properties每一个. 都代表一个层级,转换成yml之后,使用缩进代表层级关系

比如这样的properties格式:

server.port=8091
server.servlet.context-path=/test

转换成yml格式:

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

注意yml格式的要求:

  • 大小写敏感
  • 使用缩进代表层级关系 (一般缩紧就2个空格)
  • 相同的部分只出现一次 (层级相同的可以写一起)
  • 注意空格 (在值前面有一个空格,在新的层级前有2个空格)

除了以上这些普通的配置之外,还可以配置特殊的:

配置对象类型数据

student:
  id: 1
  name: 张三
  age: 18

等于:

student: {id: 1,name: 张三,age: 18}

补充:从配置文件读取自定义的对象,就不可以使用@Value注解来读取了,需要使用@ConfigurationProperties注解来进行对象的读取,并且对于的类必须有getter/setter方法。(当然一般可能不会这么读取这种数据)

配置集合类型

dbtypes:
	name:
		- mysql
		- sqlserver
		- db2

等于

dbtypes: {name: [mysql, sqlserver, db2]}

配置数组类型

orgs:
    - math
    - chinese
    - english

其实和集合差不多。

0x03_properties和yml的区别

优先级

如果一个项目中出现了既有yml又有properties的配置,那么出现冲突了,该听谁的呢?

如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的

区别

properties yml 都是 Spring Boot 支持的两种配置文件,它们可以看作是 Spring Boot 在不同时期的两款“产品”。

properties 配置文件属于早期,也是目前创建 Spring Boot(2.x)项目时默认的配置文件格式,而 yml 可以看做是对 properties 配置文件的升级,属于 Spring Boot 的“新版”配置文件。

  • 语法不同
  • properties为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用yml可以很好的解决数据冗余的问题。
  • yml通用性更好,支持更多语言,如Java、Go、Python等,如果是云服务器开发,可以使用一份配置文件作为Java和Go的共同配置文件。
  • yml虽然可以和properties共存,但一个项目中建议使用统一的配置类型文件。
  • yml支持更多的数据类型,如对象和集合

拓展:

  • 定位不同:properties 翻译成中文是“属性”的意思,所以它在创建之初,就是用来在 Spring Boot 中设置属性的。 yml 是 YAML 是缩写,它的全称 Yet Another Markup Language,翻译成中文是“另一种标记语言”。

所以从二者的定义可以看出:它们的定位和层次是完全不同的,properties 只是用来设置一些属性配置的,而 yml 的格局和愿景更大,它的定位是“另一种标记语言”,所以从格局上来讲 yml 就甩 properties 好几条街。

  • 语法不同:properties 的基本语法格式是“key=value”的形式yml 的基本语法格式是“key: value”的形式相比于 properties 来说,yml 的语法更简洁,并且可读性更高

  • yml可以配置更多的数据类型:对象,数组

  • 跨语言:properties 格式的配置文件只适用于 Spring Boot 项目,也就是只适用于 Java 语言,而 yml 支持更多的开发语言,它可以用在 Java、PHP、Python、Ruby、JavaScript、Perl、Golang 等语言中。

    至于作用嘛?如果一个公司有多个不同语言的开发团队,并且使用了配置中心(在线配置文件)的前提下,那么这些不同语言的开发团队就可以使用同一份配置文件了,也方便后期的管理和维护。

0x04_配置文件在项目中的位置

有4个位置,SpringBoot会将它们识别为是配置文件:

  • 项目的根目录下:
image-20221116215502563
  • 项目根目录下的/config子目录中:
image-20221116215606208
  • resources目录下(即classpath跟路径中):
image-20221116215704419
  • 项目的resources即classpath根路径下的/config目录中
image-20221116215750811

如果各个位置文件有冲突,优先级是?

当前项目根目录下的一个/config子目录中(最高)

config/application.properties

config/application.yml

当前项目根目录中(其次)

application.properties

application.yml

项目的resources即classpath根路径下的/config目录中(一般)

resources/config/application.properties

resources/config/application.yml

项目的resources即classpath根路径中(最后)

resources/application.properties

resources/application.yml

0x05_bootstrap配置文件

Spring Boot 中有两种上下文对象,一种是 bootstrap, 另外一种是 application(ServletContext), bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。

bootstrap配置文件特征

①boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载。

②boostrap 里面的属性不能被覆盖。

bootstrap与 application 的应用场景

application 配置文件主要用于 Spring Boot 项目的自动化配置。

bootstrap 配置文件有以下几个应用场景。

①使用 SpringCloudConfig 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。

②一些固定的不能被覆盖的属性。

③一些加密/解密的场景。

0x06_springboot项目结构

-- 项目名 
  --src 
  	--main 
  		--java 
  			java代码 
  		--resources 
  			--public 公共资源。所有共享的内容。对外公开的内容。 
  			--static静态资源。图片、js、css。不会被服务器解析。 
  				--js 
  					-- jquery.js 访问:http://ip:port/js/jquery.js 
            注意:该目录是SpringBoot可以直接识别的目录,会将其中的 
            静态资源编译到web项目中,并放到tomcat中使用。静态资源的 
            访问路径中无需声明static 例如:localhost:8080/a.png 
  			--templates  
     			FreeMarker  thymeleaf 页面所在目录。 
  		--webapp 只有当页面使用jsp时才有。 
  			--WEB-INF
			

设置WEB-INF

image-20221116220434658

其实一般没有特殊要求,不去配置webapp是比较好的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql数据库和SQL语句

一、数据库介绍&安装 1. 什么数据库软件 在前期学习的过程中&#xff0c;对于数据的保存方式有两种体现&#xff1a; 一种是将数据保存到本地的文件中&#xff0c;优点是可以持久保存&#xff0c;但是数据管理查询等相当麻烦。 一种是将数据保存到本地的内存中&#xff0c…

Linux学习记录——삼 基本指令(3)及了解权限

接着上一篇把一些基本命令写完 unzip解压默认解压到当前目录&#xff0c;加上-d后面跟路径就可以解压到指定目的地 tar指令 不同文件格式的压缩指令&#xff0c;可以直接看内容&#xff0c;不需要打开。tar后面有几个指令选项。-c表示创建压缩文件&#xff0c;-z打包并压缩&am…

E. Matrix and Shifts(思维+遍历正对角线)

Problem - 1660E - Codeforces 你会得到一个大小为nn的二进制矩阵A。行从上到下从1到n编号&#xff0c;列从左到右从1到n编号&#xff0c;位于第i行和第j列交点的元素称为Aij。考虑一组4个操作。 循环地将所有行向上移动。索引为i的行将被写在i-1行的位置上&#xff08;2≤i≤…

文件权限概念,相关操作

一&#xff0c;文件权限的基本概念 权限&#xff1a;操作系统限制对资源访问的一种机制。 文件权限的信息展示&#xff0c;使用ls -l 命令即可查看&#xff1a; 整个文件信息可以分为以下几部分&#xff1a; &#xff08;一&#xff09;第一个字段表示文件类型 和 文件权限。…

Socket套接字编程

文章目录1、网络字节序列2、socket编程接口<1>socket常见ARI<2>sockaddr结构 VS sockaddr_in结构3、UDP套接字4、TCP套接字5、总结1、网络字节序列 内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏 移地址也有大端小端…

腾讯T9纯手写基于Mycat中间件的分布式数据库架构笔记

随着移动互联网的兴起和大数据的蓬勃发展&#xff0c;系统的数据量正呈几何倍数增长&#xff0c;系统的压力也越来越大&#xff0c;这时最容易出现的问题就是服务器繁忙&#xff0c;我们可以通过增加服务器及改造系统来缓解压力&#xff0c;然后采用负载均衡、动静分离、缓存系…

流媒体传输 - RTSP Over HTTP

RTSP 的标准端口是 554&#xff0c;但是由于各种不同的防火墙等安全策略配置的原因&#xff0c;客户端在访问 554 端口时可能存在限制&#xff0c;从而无法正常传输 RTSP 报文。 但是 HTTP 端口&#xff08;80 端口&#xff09;是普遍开放的&#xff0c;于是就有了让 RTSP 报文…

【Android App】给三维的地球仪贴上动物贴纸实战(附源码和演示 超详细必看)

需要源码和图片集请点赞关注收藏后评论区留言~~~ 一、纹理贴图 给三维物体穿衣服的动作&#xff0c;通常叫做给三维图形贴图&#xff0c;更专业地说叫纹理渲染。 渲染纹理的过程主要由三大项操作组成&#xff0c;分别说明如下&#xff1a; &#xff08;1&#xff09;启用纹理…

STL的常用遍历算法(20221128)

STL的常用算法 概述&#xff1a; 算法主要是由头文件<algorithm> <functional> <numeric> 组成。 <algorithm>是所有STL头文件中最大的一个&#xff0c;涉及比较、交换、查找、遍历等等&#xff1b; <functional>定义了一些模板类&#xff0…

2022VR高级研修班总结

本人有幸参加2022VR高级研修班&#xff0c;此次高级研修班由赵沁平院士和丁文华院士领衔&#xff0c;全国知名专家及长期在相关领域从事产业、管理、科研工作的专家参与&#xff0c;带来了18个专题讲座&#xff0c;内容涵盖虚拟现实技术与系统现状与发展、产学研合作与产业协同…

都什么年代了,你居然还连不上GitHub?

前言 众所周知&#xff0c;GitHub是我们程序员在上班或者学习的时候经常会逛的一个地方[手动狗头]&#xff0c;而且如果我们想参与开源项目的话&#xff0c;GitHub也是一个很好的平台。 可问题是&#xff0c;GitHub网页总是进不去&#xff0c;提交代码到GitHub也总是超时&…

在Navicat上如何停止正在运行的MYSQL语句

目录 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;正文 1. 图形化停止SQL 2. 用SQL方式停止运行的SQL &#xff08;1&#xff09;找到运行的SQL的ID &#xff08;2&#xff09;运行kill命令杀掉SQL &#xff08;一&#xff09;前言 众所周知&#xff0c;…

BI数据分析软件有哪些?为什么说奥威BI很特别?

经过十几年的发展&#xff0c;以及近几年国家的大力鼓励发展大数据智能产业等原因&#xff0c;BI数据分析软件开始越来越被大家所熟知&#xff0c;那么BI数据分析软件都有哪些&#xff0c;为什么说奥威BI数据分析软件很特别&#xff1f;它对企业的大数据智能数据可视化分析起到…

什么样的人最适合做软件测试---喜欢找人帮忙办事的人

今天和大家说下什么样类型的人适合做软件测试。 经验干货&#xff0c;可仔细品 很多测试工程师面试中也可能会遇到问题&#xff0c;说怎么做一名优秀合格的测试工程师&#xff0c;需要有哪些品质&#xff0c;很多人会回答说要仔细&#xff0c;要承受压力&#xff0c;要有责任感…

2013-2020年全国31省数字经济数据集

1、时间&#xff1a;2013-2020年 2、来源&#xff1a;整理自国家统计J和统计NJ 3、指标包括&#xff1a; 信息化基础&#xff1a;"光缆线路长度(公里)、移动电话基站&#xff08;万个&#xff09;、信息传输、软件和信息技术服务业城镇单位就业人员(万人)、年末常住人口…

Android-P夜间模式

0 前言 Android-P可通过“Developer options > Night mode”打开夜间模式&#xff0c;本文研究其配置和效果。 验证环境&#xff1a;Pixel 3a、模拟器 1 设置 图1.1 Night mode上图对应XML配置如下&#xff1a; <ListPreferenceandroid:key"dark_ui_mode"and…

【Python】六、程序流程控制综合训练

文章目录实验目的一、列表定义二、元组定义三、列表的常用操作append() -- 向列表的尾部添加元素insert(index&#xff0c;object) -- 向指定的下标处添加元素sort&#xff08;&#xff09;-- 进行排序&#xff08;从下到大 int类型&#xff09;可以对字母进行排序&#xff08;…

多态原理、虚表指针与虚基表的内存布局。

文章目录前言多态虚函数静态类型与动态类型重载、覆盖和隐藏的区别final和override虚函数的默认实参虚析构函数在构造函数和析构函数中调用虚函数多态原理各种形式继承的虚函数内存布局单一继承无覆盖单一继承有覆盖单一虚拟继承有覆盖多继承无覆盖多继承有覆盖菱形继承有覆盖菱…

STC/MLLT--学习笔记

gmm建模方差使用对角矩阵的前提是假设特征之间相互独立&#xff0c;使用full或者block-diagonal矩阵可以对相关性的特征建模&#xff0c;但是参数增多。为了解决使用这个问题&#xff0c;有两种方法&#xff1a; feature-space 使用DCT或者LDA去相关model-space 不同的模型可以…

连续时间系统的时域分析

一.微分方程的求解 1.求微分方程的齐次解 &#xff08;1&#xff09;写出特征方程并求解 2.写出齐次解 2.求微分方程的特解 已知 &#xff08;1&#xff09;根据表2-2&#xff0c;写出特解函数 ​​​​​​​ &#xff08;2&#xff09;带入并求解 3.完全解 二.微分方…