【基础篇】三、SpringBoot基础配置

news2024/9/22 17:31:38

文章目录

  • 0、模块的复制
  • 1、配置文件格式
  • 2、yaml语法
  • 3、yaml数据读取方式
  • 4、关于封装自定义对象来读取yaml配置的思考
  • 4、多环境启动
    • 5、配置文件分类

在这里插入图片描述

0、模块的复制

平时要大量创建模块时,可以直接复制模块,打开project的目录:

在这里插入图片描述

复制粘贴:

在这里插入图片描述
进入副本,修改pom文件中的Maven坐标,注意,GAV坐标必须改,name和description随便,也可以删掉,name的值就是IDEA中maven栏的模块名,当这个值为空时,则取artifactId的值

在这里插入图片描述

删掉多余的文件,留一个src和pom文件就行,iml文件一会儿用IDEA打开模块会重新生成。

在这里插入图片描述

使用IDEA打开:

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

成功:

在这里插入图片描述

1、配置文件格式

SpringBoot默认配置文件application.properties,通过键值对配置对应属性

# 修改服务器端口
server.port=80

# 关闭运行日志图标(banner),即Spring的那个轮廓图不要了
spring.main.banner-mode=off

# 放一张自己的图做为服务启动的banner,图片放resources目录下
spring.banner.image.location=mylogo.png

#设置日志相关,默认info,debug级别太细
logging.level.root=debug

# 某个包下使用error级别的日志
logging.level.com.llg=error

SpringBoot中导入对应starter后,提供对应配置属性,书写时也出现相应的提示。更多属性及含义,可以去官网文档:https://docs.spring.io/spring-boot/docs/…

在这里插入图片描述

SpringBoot属性配置文件,可用properties、yml、yaml格式,常用yml文件:

在这里插入图片描述
当三个配置文件都存在的时候,优先级:

  • application.properties > application.yml > application.yaml
  • 不同配置文件中相同配置按照加载优先级相互覆盖
  • 不同配置文件中不同配置全部保留
关于写配置文件中的属性时,没有提示的解决方案:

打开项目结构,这次不看Moudles,选择Facets,再点击你要操作的模块名,然后点击绿叶标志的按钮

在这里插入图片描述

点击+,把两个yml文件的配置文件加进来:

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

此时,项目中yml的图标已变成了Spring配置文件的图标

在这里插入图片描述
可能出现的一个小Bug:

在这里插入图片描述

2、yaml语法

yaml文件介绍:

yaml,一种数据层序列化格式,文件扩展名为.yml(主流)和.yaml。优点:

  • 以数据为核心,重数据、轻格式
  • 容易与脚本语言交互

在这里插入图片描述

yaml文件语法:

  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格,不是tab,空格数量不限
  • 属性值前添加空格
  • #表示注释
  • 数组数据在数据书写位置的下方使用减号做为数据开始的符号,每行写一个数据,减号与数据间加空格

在这里插入图片描述
关于字面值的表示方法:

在这里插入图片描述

3、yaml数据读取方式

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

在这里插入图片描述

//演示下取对象数组中某个对象的属性
@Value("${users[0].age}")
private String age;

另外,在yaml配置文件内部,也可以使用dollar大括号来优化,做到一改全改:

在这里插入图片描述
改为:
在这里插入图片描述
且可以使用:来配个默认值。

addr: ${nacos-addr:nacos-headless}

当属性中出现转义字符,想让这个字符生效,必须加双引号,不加则按普通字符处理。

lesson: "Spring\tboot\nlesson"

方式二: 封装全部数据到Environment对象,再使用getProperty(“属性名”)

上面的方式中,想取个值,还得定义个变量去装,如此,如果一次性取多个值,岂不是乱了?==> Environment对象,通过自动装配,将所有数据封装到Environment对象中,取数据直接调用getProperty()方法,如此就节约了变量的定义。

在这里插入图片描述

方式三: 自定义对象封装指定数据,注解+prefix属性来说明要封装哪一块数据

上面的方式用一个对象封装所有配置数据,能不能有针对性的封装呢?比如:

datasource:
  driver: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/test_db
  username: root
  password: root123

思路大概是:

  • 创建类,用来封装某一部分配置中的数据
  • 由Spring去帮饿哦们加载数据到对象中,一定要告诉Spring加载哪组数据
  • 使用的时候直接从Spring中获取信息使用
//注意属性名要和配置文件中的字段保持一致
@Setter
@Getter
public class MyDataSource{

	private String driver;
	private String url;
	private String username;
	private String password;
}

思考?Spring拿到配置文件的值了,怎么给你的这个类的对象赋值? ⇒ 这个对象得受Spring控制 ⇒ 做为Bean => 加@Component

再思考?配置信息那么多字段,Spring怎么知道你要谁 ⇒ 指定要加载的数据 ⇒ @ConfigurationProperties

@Setter
@Getter
@Component
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource{

	private String driver;
	private String url;
	private String username;
	private String password;
}

注入下MyDataSource这个Bean,看下属性是否都拿到了

@Autowired
private MyDataSource datasource;

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

4、关于封装自定义对象来读取yaml配置的思考

server:
  servlet:
    context-path: /test123

查看启动日志,发现tomcat的context path变了,这个数据怎么进去的?就是用封装对象的方式+@ConfigurationProperties
注解去拿的。当然这个时候你访问地址也就得变了:/访问不通了

4、多环境启动

多环境开发配置:

yml文件写法:

在这里插入图片描述
spring.profiles是过时写法,可改可不改:

在这里插入图片描述

若使用properties文件来进行多环境启动,则需要多文件,注意文件命名:

在这里插入图片描述

多环境启动命令行:

启动时不想使用打包时的配置,如端口被占用,默认使用dev环境,但我要连test环境:

在这里插入图片描述

多环境开发兼容问题:

当maven的pom文件中也配置了多环境开发,且与SpringBoot冲突,如一个默认测试,一个默认开发,此时以Maven为主:

在这里插入图片描述

实现兼容:
  • Maven中设置了多环境属性:
    在这里插入图片描述

  • SpringBoot中引用Maven属性
    在这里插入图片描述

  • 此时直接打包,Maven指令执行结束后,生成jar包,但类参与了编译而配置文件没有参与编译,而是复制到包中,${}未被解析
    在这里插入图片描述

  • 此时加插件,对资源文件开启对默认占位符的解析
    在这里插入图片描述

5、配置文件分类

问题背景:

在这里插入图片描述

解决思路:不同位置的application.yml文件优先级不同,在不同的场合,可以再写一个更高优先级的application.yml文件,来覆盖旧的配置

在这里插入图片描述

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

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

相关文章

LeetCode142.环形链表-II

这道题和上一道题几乎没有任何区别啊,为什么还是中等难度,我用上一道题的解法一分钟就写出来了,只不过返回的不是true和false而是节点,以下是我的代码: public class Solution {public ListNode detectCycle(ListNode…

接口自动化测试推荐用什么框架?

在推荐接口自动化测试框架时,需要考虑多个因素,包括项目需求、技术栈、团队经验和个人偏好。 以下是几个常用的接口自动化测试框架供你参考: Postman: Postman是一个功能强大且易于上手的接口测试工具,它提供了许多…

卡尔曼滤波应用在数据处理方面的应用

卡尔曼滤波应用到交通领域 滤波器介绍核心思想核心公式一维卡尔曼滤波器示例导入所需的库 滤波器介绍 卡尔曼滤波器是一种用于估计系统状态的数学方法,它以卡尔曼核心思想为基础,广泛应用于估计动态系统的状态和滤除测量中的噪声。以下是卡尔曼滤波器的核…

学Python的漫画漫步进阶 -- 第十步

学Python的漫画漫步进阶 -- 第十步 十、异常处理10.1 第一个异常——除零异常10.2 捕获异常10.2.1 try-except语句10.2.2 多个except代码块10.2.3 多重异常捕获10.2.4 try-except语句嵌套 10.3 使用finally代码块释放资源10.4 自定义异常类10.5 动动手——手动引发异常10.6 练一…

安卓可视大屏寻呼台 兼容标准sip协议

SV-A32i 安卓可视大屏寻呼台 兼容标准sip协议 A32i 是专门针对行业用户需求研发的一款可视大屏寻呼台产品,配备鹅颈麦克风,支持高清免提通话。基于 Android 9.0 系统,可支持第三方Android 应用安装使用,界面使用便捷。采用 10.1 英…

大模型与数据库:AI 时代的双向助推力

随着 AIGC 的时代到来,以 GPT 为首的大型语言模型(Large Language Model,LLM)已经成为当今人工智能领域最热门的话题之一。这些强大的模型不仅在内容创意生成、语言翻译和代码辅助等任务中表现出色,还对数据库的发展带…

DatenLord前沿技术分享 NO.35

达坦科技专注于打造新一代开源跨云存储平台DatenLord,通过软硬件深度融合的方式打通云云壁垒,致力于解决多云架构、多数据中心场景下异构存储、数据统一管理需求等问题,以满足不同行业客户对海量数据跨云、跨数据中心高性能访问的需求。在本周…

通过机器视觉对硬盘容器上盖的字符进行视觉识别,判断是否混料

 客户的需求  检测内容 硬盘容器上盖字符识别,以判断是否有混料。  检测要求 利用硬盘容器上盖表面字符,来判断是否有混料的情况发生,先识别全部字符。  视觉可行性分析 对贵司的样品进行了光学实验,并进行…

【操作系统】进程,线程和协程的哪些事儿

进程,线程和协程的哪些事儿 进程什么是进程?进程的状态进程的控制结构 线程为什么使用线程?什么是线程?线程与进程的比较线程的实现用户级线程内核级线程轻量级进程 协程协程是什么?协程的优势 区别进程与线程的区别协程与线程的…

【Spatial-Temporal Action Localization(三)】论文阅读2018年

文章目录 1. AVA: A Video Dataset of Spatio-temporally Localized Atomic Visual Actions 时空局部原子视觉动作的视频数据集摘要和结论模型框架思考不足之处时间信息对于识别 AVA 类别有多重要?定位与识别相比有何挑战性?哪些类别具有挑战性&#xff…

Python console cmd命令乱码(无论是os还是subprocess)

给我整无语了,花了一个多小时,根本没找到需要的答案。 网上全是改这样的 五花八门都有,我全部尝试并且还就再排列组合修改,累的。 在下文找到答案,直接os.system(chcp 65001),问题解决!引用文献…

IEC 61850扫盲

目录 1 简介 2 主要特点 2.1 信息分层 2.2 信息模型与通信协议独立 2.3 数据自描述 2.4 面向对象数据统一建模 2.5 带确认服务 2.6 不带确认的服务 2.7 VMD(虚拟制造设备) 2.8 GOOSE(Generic Object Oriented Substation Event&…

LeetCode(力扣)435. 无重叠区间Python

LeetCode435. 无重叠区间 题目链接代码 题目链接 https://leetcode.cn/problems/non-overlapping-intervals/ 代码 class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if not intervals:return 0intervals.sort(keylambda x: x[0])co…

ajax day4

1、promise链式调用 /*** 目标:把回调函数嵌套代码,改成Promise链式调用结构* 需求:获取默认第一个省,第一个市,第一个地区并展示在下拉菜单中*/let pname axios({url: http://hmajax.itheima.net/api/province,}).t…

徐亦达机器学习:Kalman Filter 卡尔曼滤波笔记 (一)

P ( x t P(x_t P(xt​| x t − 1 ) x_{t-1}) xt−1​) P ( y t P(y_t P(yt​| x t ) x_t) xt​) P ( x 1 ) P(x_1) P(x1​)Discrete State DM A X t − 1 , X t A_{X_{t-1},X_t} AXt−1​,Xt​​Any π \pi πLinear Gassian Kalman DM N ( A X t − 1 B , Q ) N(AX_{t-1}B,Q)…

open-interpreter +GTX1080+wxbot+codellama

https://github.com/KillianLucas/open-interpreter/ Open Interpreter(开放解释器) 可以让大语言模型(LLMs)在本地运行代码(比如 Python、JavaScript、Shell 等)。安装后,在终端上运行 $ inte…

窄边极简折叠玻璃门,实现自由推拉及折叠,遥控随意切换透明与磨砂效果

窄边极简折叠玻璃门是一种非常实用和创新的门设计,可以提供各种功能和效果。以下是一些关于窄边极简折叠玻璃门的相关技巧和应用: 1. 自由推拉和折叠:这种门设计允许你自由地推拉和折叠门,根据需要调整门的宽度和开启面积。这使得…

数字人员工成企业得力助手,虚拟数字人为企业注入高科技基因

随着互联网和人工智能技术的快速发展,以“数字员工”为代表的数字生产力,正在出现在各行各业的业务场景中。数字人员工的出现不是替代人类,而是通过技术提高工作效率,实现更加智能化的服务体验,帮助企业实现大规模自动…

C语言--字符串旋转笔试题

C语言–字符串旋转笔试题 文章目录 C语言--字符串旋转笔试题一、字符串左旋1.1 思路11.2 思路1代码1.3 思路21.4 思路2代码 二、字符串旋转结果判断2.1 思路12.2 思路2 一、字符串左旋 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字…

Truenas scale 配置Zerotier

Zerotier 注册 官网注册 zerotier, Truenas 安装 Zerotier Truenas的 APP -> Available Applications 中搜索 zerotier 在 Network中填入 zerotier 注册账户后给你的ID。 勾选 Host Network 在这里插入图片描述 Zerotier 中给定权限 左侧 框框 打钩&#…