SpringBoot配置 -- SpringBoot快速入门保姆级教程(二)

news2024/12/26 20:49:45

文章目录

  • 前言
  • 二、SpringBoot配置
    • 1. 了解配置文件的3种格式
    • 2.yaml格式语法规则
    • 3.读取yaml数据的3种方式
    • 4.多环境开发配置
    • 5.多环境命令行启动参数设置
    • 6. 多环境开发兼容问题
    • 7.配置文件分类
  • 总结


前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

在这里插入图片描述

二、SpringBoot配置

1. 了解配置文件的3种格式

  1. SpringBoot配置文件种类

在这里插入图片描述

  1. 编码环境准备(辅助理解)
  • 创建新的SptingBoot模块,勾选web技术支持

在这里插入图片描述
在这里插入图片描述

  • 运行启动类

在这里插入图片描述

从运行结果中我们可以发现默认服务器为tomcat,默认端口为8080

  1. 编辑application.properties文件,将端口号改为80并运行启动类
server.port=80

在这里插入图片描述

我们发现默认端口号变成了80

  1. 注释掉application.properties文件的内容,创建编辑application.yml文件,将端口号改为81并运行启动类
server:
  port: 81

在这里插入图片描述

我们发现默认端口号变成了81

  1. 注释掉application.yml文件的内容,创建编辑application.yaml文件,将端口号改为82并运行启动类
server:
  port: 82

在这里插入图片描述
我们发现默认端口号变成了82

  1. 当三种配置文件都开启,运行启动类,我们发现端口号为80;将properties文件注释掉,运行启动类,我们发现默认端口号为81,于是我们得知SpringBoot配置文件加载顺序:

application.properties 优先于 application.yml 优先于 application.yaml

2.yaml格式语法规则

  1. 了解yaml格式

在这里插入图片描述

  1. yaml语法格式

1.大小写敏感
2.属性层级关系使用多行描述,每行结尾使用冒号结束
3.使用缩进表示层级关系,同层级左侧对齐,只允许使用空格 (不允许使用Tab键)
4.属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
5.#表示注释
6.数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔

核心规则: 数据前面要加空格与冒号隔开

3.读取yaml数据的3种方式

  1. 方式一:直接调用

使用@Value读取单个数据,属性名引用方式: {一级属性名.二级属性名}

在这里插入图片描述

  1. 方法二:封装全部数据到Environment对象

Environment数据类型 结合 @Autowired 注解调用

在这里插入图片描述

  1. 方法三:自定义对象封装指定数据

将yml文件中的要读取的信息封装为实体类进行访问

在这里插入图片描述

  1. 自定义对象封装指定数据警告解决方案:添加相关依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

4.多环境开发配置

  1. yaml格式写法(示例)

在这里插入图片描述

  1. properties格式写法(示例)
  • application.properties文件
spring.profiles.active=pro
  • application-dev.properties文件
server.port=8080
  • application-pro.properties文件
server.port=8081
  • application-test.properties文件
server.port=8082

5.多环境命令行启动参数设置

  1. 多环境启动命令行格式

在这里插入图片描述

  1. 在设置中修改字符集,支持中文识别,防止打包失败

在这里插入图片描述

  1. 先执行 clean 指令防止上一次的操作影响到了打包后的运行结果,然后再执行 package 指令

在这里插入图片描述

  1. 在打包好的jar包文件路径上输入cmd进入命令行窗口

在这里插入图片描述

  1. 输入 java -jar d(jar包命名首字母),然后按tab建自动补全,敲回车,运行程序

在这里插入图片描述

  1. ctrl + c 终止程序,根据yaml配置输入更换开发环境命令行,回车运行

在这里插入图片描述

在这里插入图片描述

我们发现端口号由开发环境 dev 的 80 变成了 test 环境的 82

  1. ctrl + c 终止程序,输入修改端口号命令行,回车运行

在这里插入图片描述

我们发现 test 开发环境的端口号被改成了 88

  1. 命令行之所以能覆盖配置文件的优先是因为其优先级高

[以下为spring官网关于配置的优先级的叙述](https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config)

在这里插入图片描述

6. 多环境开发兼容问题

  1. 情境导入

提出问题:
maven高级(可以在我博客主页中找到相关文章)中也涉及到了多环境开发,当maven中和SpringBoot中的yml配置同时出现多环境开发管理的时候(比如maven中主导开发环境为开发,而SpringBoot中的主导开发环境是测试),该如何解决这个冲突呢?

思考:
实际上,当我们的程序部署到服务器后是在服务器上用命令行运行,最终启动的是打包好的jar包,而不是本地的电脑编译器,执行package指令是maven的功能,所以当存在多环境开发兼容问题的时候maven应该起主导作用(maven负责管理版本,yml加载maven的版本)。

  1. 在pom.xml中设置当前开发环境为生产环境pro,在yml文件中设置开发环境为开发环境dev,示例代码如下:
  <profiles>
        <!--开发环境-->
        <profile>
            <id>dev</id>
            <properties>
            </properties>
        </profile>
        <!--生产环境-->
        <profile>
            <id>pro</id>
            <properties>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <!--测试环境-->
        <profile>
            <id>test</id>
            <properties>
            </properties>
        </profile>
    </profiles>

#设置启用的环境
spring:
  profiles:
    active: dev
---
#开发
spring:
  profiles: dev
server:
  port: 80
---
#生产
spring:
  profiles: pro
server:
  port: 81
---
#测试
spring:
  profiles: test
server:
  port: 82
---

  1. 执行maven的package指令,找到生成的jar包,在对应路径上输入cmd,回车,输入运行jar包的命令行,观察当 maven(默认环境是pro,对应服务器端口号为81)和 yaml(默认环境是dev,对应服务器端口号为80)同时存在多环境控制时默认开发环境是哪个

在这里插入图片描述

通过命令行运行结果我们发现此时默认端口号为80,yml的配置起了主导作用,因为此时maven中的配置还没加载到yml配置文件中

  1. 将maven配置加载到yml配置文件中,然后将之前打包的jar包删掉,重新打包,再用命令行启动

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

我们发现此时的端口既不是有maven主导的pro生产环境(端口81),也不是有yml中的主导环境pre(端口80)

  1. 之所以端口号是8080的原因是因为yml中绑定的${profiles.active}没有解析,我们打开jar包中的BOOT-INF/classes目录中的application.yml文件可以验证这一点

在这里插入图片描述

  1. 解决方案:在pom.xml中添加解析插件并重新运行jar包,问题解决
 <!--对资源文件开启对默认占位符的解析-->
 <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-resources-plugin</artifactId>
     <version>3.2.0</version>
     <configuration>
        <encoding>UTF-8</encoding>
            <useDefaultDelimiters>true</useDefaultDelimiters>
        </configuration>
</plugin>

在这里插入图片描述

7.配置文件分类

  1. 情景导入

产品测试的时候jar包运行命令行太多,操作麻烦,容易出错

在这里插入图片描述

  1. 配置文件分类

SpringBoot中4级配置文件:
1级[高]: file : config/application.yml
2级: file : application.yml
3级: classpath: config/application.yml
4级[低]: classpath: application.yml

作用:
1级与2级留做系统打包后设置通用属性
3级与4级用于系统开发阶段设置通用属性

  1. 3,4级配置文件优先级的探讨

在这里插入图片描述
在这里插入图片描述

  1. 2级配置文件优先级的探讨

在这里插入图片描述

在这里插入图片描述

  1. 1级配置文件优先级的探讨
  • 在target目录下新建目录config, 并新建编辑一个默认端口号为89的application.yml配置文件,再次运行打包好的jar包

在这里插入图片描述

  • 根据报错信息添加一个子目录

在这里插入图片描述

  • 再次运行jar包

在这里插入图片描述

在这里插入图片描述

总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

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

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

相关文章

vcruntime140.dll如何修复

VCRUNTIME140.dll是Windows操作系统上一个非常重要的动态链接库文件&#xff0c;它是由Microsoft Visual C Runtime提供的运行时库文件之一&#xff0c;被许多应用程序用来进行编译和运行。如果该文件丢失或损坏&#xff0c;很多应用程序就无法正常运行&#xff0c;这可能会带来…

三分钟了解SpringBoot配置优先级底层源码解析

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是冰点&#xff0c;从业11年&#xff0c;目前在物流独角兽企业从事技术方面工作&#xff0c;&#x1f342;博主正在努力完成2023计划中&#xff1a;以梦为马&#xff0c;扬帆起航&#xff0c;2023追梦人&#x1f4dd;联系…

关于性能测试平台的一些想法,想跟大家聊一下

目录 一、任务管理 二、用例管理 三、环境管理 四、压测机管理 五、数据管理 六、监控管理 七、日志管理 八、报表管理 九、配置管理 十、系统管理 组织架构 这里我按照每个不同系统归属的项目组为横向&#xff0c;性能测试团队作为职能部门为纵向的矩阵式组织架构为…

JUC学习(二)

目录 Doug Lea — JUC并发包的作者锁框架Lock和Condition接口可重入锁公平锁与非公平锁读写锁锁降级和锁升级队列同步器AQS底层实现公平锁一定公平吗&#xff1f;Condition实现原理 ——————————————————————————————— 在前面&#xff0c;我们了解…

ICV报告:乘光伏新能源汽车之势,功率器件蓄势待发

前言&#xff1a; 电力电子器件&#xff08;Power Electronic Device&#xff09;&#xff0c;又称为功率半导体器件&#xff0c;用于电能变换和电能控制电路中的大功率(通常指电流为数十至数千安&#xff0c;电压为数百伏以上)电子器件。功率器件能够承受和控制较大电流、电压…

无限阳光、自动收集阳光CALL、阳光产生速度

简单实现无限阳光 本次实验内容&#xff1a;通过逆向分析植物阳光数量的动态地址找到阳光的基址与偏移&#xff0c;从而实现每次启动游戏都能够使用基址加偏移的方式定位阳光数据&#xff0c;最后我们将通过使用C语言编写通用辅助实现简单的无限阳光外挂&#xff0c;在教程开始…

Vue Router路由管理器

目录&#xff1a; 相关理解基本路由几个注意事项嵌套&#xff08;多级&#xff09;路由路由的query参数命名路由路由的params参数路由的props配置路由跳转的replace方法编程式路由导航缓存路由组件activated和deactivated路由守卫路由器的两种工作模式 相关理解 vue-route…

博学谷学习记录】超强总结,用心分享 | 架构师 敏捷开发 学习总结

文章目录 敏捷开发1. 概述2. 敏捷开发 敏捷开发 1. 概述 随着软件开发技术的不断发展&#xff0c;现在出现了很多种不同的开发模式&#xff0c;其实敏捷开发已经成为现在很多企业开发应用程序都想要选择的开发方案&#xff0c;那么什么是敏捷开发呢&#xff1f;1.1 四种开发模…

Linux 配置Java环境(一)

Linux 配置Java环境 一、配置Java环境1、查看系统是否有java环境2、卸载系统自带的jdk3、创建一个文件夹用于存放java的压缩包4、包下载好的jdk拖到java文件夹5、安装jdk6、配置环境变量7、让配置生效8、验证是否配置成功 一、配置Java环境 1、查看系统是否有java环境 输入指…

nginx中location和rewrite

常用的Nginx 正则表达式 ^ &#xff1a;匹配输入字符串的起始位置 $ &#xff1a;匹配输入字符串的结束位置 * &#xff1a;匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll” &#xff1a;匹配前面的字符一次或多次。如“ol”能匹配“ol”及“oll”、“olll…

0-1背包问题:动态规划的经典应用

文章目录 引言背包问题简介0-1背包问题定义0-1背包问题的限制条件 动态规划解决思路状态定义状态转移方程 背包问题的Java实现示例与分析 总结 引言 背包问题是在给定一组物品和一个背包容量的情况下&#xff0c;如何选择物品放入背包&#xff0c;以使得放入背包的物品总价值最…

高边功率开关参数Load current(ISO)和Nominal current

1. IL(nom)是没有加散热片的情况下&#xff0c;考虑RON和BTS6133D与环境热阻计算得到的电流值&#xff1b; 2. IL(iso)是有散热片的情况下计算得到的电流值&#xff1b; 3. IL12(SC)是如果负载电流达到75A以上&#xff0c;BTS6143D会通过不断重启来来限制电流在75A以下。

【论文简述】GeoMVSNet: Learning Multi-View Stereo with Geometry Perception(CVPR 2023)

一、论文简述 1. 第一作者&#xff1a;Jie Zhu 2. 发表年份&#xff1a;2023 3. 发表期刊&#xff1a;CVPR 4. 关键词&#xff1a;MVS、级联结构、几何感知、频域增强、高斯混合模型 5. 探索动机&#xff1a;基于级联的结构以从粗到细的方式计算不同分辨率的深度图&#x…

数据结构与算法练习(二)数组模拟队列

文章目录 1、队列2、数组实现队列3、数组实现循环队列 1、队列 队列是一个有序列表&#xff0c;可以用数组或链表来实现 遵循先入先出的原则 在队尾插入元素叫做入队&#xff0c;对头删除元素叫做出队。2、数组实现队列 思路&#xff1a; 用front和rear记录队列前后的下标&a…

【MCS-51单片机汇编语言】期末复习总结⑤——定时器中断方式与查询方式程序设计(题型五)

文章目录 知识准备工作方式寄存器TMODTCON寄存器IE寄存器 定时/计数器的使用初始化 常考题型例题1题目描述题目解析题解 例题2题目描述题目解析题解 知识准备 工作方式寄存器TMOD D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0 [注]&#xff1a;TMOD高4位与T1相关&#xff0c;低…

iptables和防火墙

文章目录 1.防火墙2.Iptables基本介绍2.1 什么是iptables2.2 什么是包过滤防火墙2.3 包过滤防火墙如何实现 1.防火墙 Linux防火墙主要工作在网络层&#xff0c;针对 TCP/IP 数据包实施过滤和限制&#xff0c;典型的包过滤防火墙&#xff0c;基于内核编码实现&#xff0c;具有非…

Qt(C++)绘制指针仪表盘显示当前温度

一、功能介绍 当前文章要实现的功能: 使用Qt绘制一个仪表盘,用来显示当前的温度,绘制刻度、绘制数字、绘制温度指针。仪表盘全程使用QPainter进行绘制,QPainter是Qt框架中非常重要的一个类,绘制功能的实现离不开它。如果想要使用Qt进行高质量的绘图或UI设计,必须掌握QP…

Groovy 基本语法

一、简介 类型转换:当需要时,类型之间会自动发生类型转换: 字符串&#xff08;String&#xff09;、基本类型(如int) 和类型的包装类(如Integer) 类说明&#xff1a;如果在一个groovy 文件中没有任何类定义&#xff0c;它将被当做script 来处理&#xff0c;也就意味着这个文件将…

DragGAN-点对点的手动P图

原文网站link以及论文链接&#xff1a; https://vcai.mpi-inf.mpg.de/projects/DragGAN/ https://arxiv.org/pdf/2305.10973.pdf 简介 深度生成模型近年在合成随机真实感图像方面取得了不错的成绩。在现实世界的应用中&#xff0c;这种基于学习的图像合成方法中一个关键功能是…

文心一言 VS 讯飞星火 VS chatgpt (31)-- 算法导论5.2 3题

三、利用指示器随机变量来计算掷n 个骰子之和的期望值。 文心一言&#xff1a; 为了计算掷n个骰子之和的期望值&#xff0c;我们需要先了解一个重要的概念&#xff1a;指示器随机变量。 指示器随机变量是一种特殊的随机变量&#xff0c;它只有两个取值&#xff1a;0和1。通常…