03_SpringBoot项目配置

2023-05-16

文章目录

  • 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是比较好的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

03_SpringBoot项目配置 的相关文章

随机推荐

  • CentOS系统下安装docker简易步骤

    docker 官网地址 https www docker com docker 开发文档 https docs docker com manuals 手册 gt install gt Linux xff08 centos xff09 环境为
  • linux环境安装jdk

    linux环境安装jdk 1 查看本环境下是否java环境 java version 不存在 已存在 2 如果不存在 xff0c 先去下载jdk 到官网下载jdk 注 xff1a 一定要根据具体的linux系统按需下载对应的安装包 我的是l
  • linux环境下安装tomcat

    配置tomcat 到官网下载tar包 将tar包上传到服务器 并解压 span class token function tar span zxvf apache tomcat 9 0 65 tar gz 重命名tomcat9 span c
  • docker基础命令以及常用命令

    docker 基本命令 1 其他命令 span class token comment 查看版本 span docker version span class token comment 查看信息 span docker info span
  • Redis基础数据结构及其使用

    Redis 一 xff0c docker方式安装redis span class token comment 拉取 redis 镜像 span span class token operator gt span span class tok
  • 设计模式之--原型模式

    原型模式 原型实例指定创建对象的种类 xff0c 并且通过复制这些原型创建新对象 使用场景 xff1a 类初始化消耗资源比较多 使用new生成一个对象需要非常繁琐的过程 构造函数比较复杂 在循环体中产生大量对象 浅克隆 浅克隆只是完整复制了
  • redis分布式锁使用方式

    为什么使用锁 xff1f 锁的作用是要解决多线程对共享资源的访问而产生的线程安全问题 当多个线程并发操作某个对象时 xff0c 可以通过synchronized来保证同一时刻只能有一个线程获取到对象锁进而处理synchronized关键字修
  • Redis的延时队列

    延时队列 redis的list数据结构用来做一部消息队列 xff0c 使用rpush lpush操作入队列 使用lpop rpop来出队列 span class token operator gt span rpush notify que
  • 设计模式---代理模式

    代理模式 proxy pattern 定义 xff1a 指为其他对象提供一种代理 xff0c 以控制对这个对象的访问 代理对象在客户端和目标对象之间起到中介作用 使用目的 保护目标对象增强目标对象 解释 Subject是顶层接口 xff0c
  • 04747 java程序设计笔记 --多线程

    文字篇 线程概念 进程 程序在处理机的一次运行 xff0c xff08 从代码加载 xff0c 执行至完毕的一个完成过程 xff09 线程 进程执行过程中产生的多条执行线索 xff0c 比进程单位更小的执行单位 它没有出口 xff0c 没有
  • Kubernetes(k8s)基础

    pod Pod是什么 Pod是Kubernetes创建或部署的最小单位 是Kubernetes集群中的一个应用实例 xff0c 总是部署在同一个节点Node上 Pod中包含了一个或多个容器 xff0c 还包括了存储 网络等各个容器共享的资源
  • 04747java程序设计 之 输入输出流

    输入输出流 数据流 概念 数据流指一组有顺序的 xff0c 有起点和重点的字节集合 输入流 概念 只读 xff0c 用于向计算机内输入信息使用 主要的读取方法 int read 从输入流中读取一个字节的二进制数据 int read byte
  • 04747java程序设计 -- 继承与多态

    继承与多态 子类 is a 关系 整体与部分 has a extends 继承关键词 父类也叫做 超类 基类 object 类 类层次最高点 xff0c 是所有类的直接或间接父类 方法 public final Class getClass
  • 03731计算机网络原理 - 计算机网络概念 脑图整理

  • 03137计算机网络原理 - 计算机网络体系结构

  • 03137计算机网络原 - 物理层

    物理层 基础概念 OSI模型最底层 功能 为在链路实体间传送比特流而对物理连接的 接通 维持 和 拆除 提供机械 电气 功能和规程方面的方法 作用 尽可能屏蔽现有多种多样的硬件设备 传输媒体和通信手段的差异 确保原始数据可以在各种物理媒介上
  • 03137计算机网络原理 - 数据链路层

    数据链路层 功能 定义 基本功能是 向该层用户 提供透明和可靠的数据传送基本服务 帧和介质访问控制 数据链路层 是 对物理层传输原始比特流功能的加强 将物理层提供的可能出错的粗粒连接改造成逻辑上无差错的数据链路 使之对网络层表现为无差错的线
  • 彻底卸载Android Studio

    在安装Android Studio会有很多问题导致无法正常运行 xff0c 多次下载AS多次错误后了解到 xff0c 删除以下四个文件才能彻底卸载Android Studio 第一个文件 xff1a gradle 路径 xff1a C Us
  • Linux远程登录

    L i n u x 远程登录
  • 03_SpringBoot项目配置

    文章目录 SpringBoot项目配置0x01 properties格式配置文件0x02 yml格式配置文件配置对象类型数据配置集合类型配置数组类型 0x03 properties和yml的区别优先级区别 0x04 配置文件在项目中的位置0