SpringBoot : ch12 多模块配置YAML文件
前言
当您使用SpringBoot框架进行项目开发时,通常需要配置一些参数和属性。在实际开发中,可能需要将这些配置参数分成多个不同的YAML文件,并将它们组织到不同的模块中。这样可以方便管理和维护配置文件,并且可以避免配置文件的冲突。
本文将为您介绍如何在SpringBoot多模块项目中配置YAML文件。并演示如何将配置文件组织到不同的模块中,以及如何在应用程序中读取和使用这些配置文件。
一、前期准备
1、新建项目,结构如下

2、导入依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency><dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><image><builder>paketobuildpacks/builder-jammy-base:latest</builder></image></configuration></plugin></plugins></build>
在dependencies标签中,列出了项目所依赖的各个库和框架,包括:
- spring-boot-starter-amqp:用于支持RabbitMQ消息队列的Spring Boot Starter。
- spring-boot-starter-data-elasticsearch:用于支持Elasticsearch搜索引擎的Spring Boot Starter。
- spring-boot-starter-data-redis:用于支持Redis缓存和数据存储的Spring Boot Starter。
- spring-boot-starter-jdbc:用于支持JDBC数据库访问的Spring Boot Starter。
- spring-boot-starter-web:用于支持Web开发的Spring Boot Starter。
- mybatis-spring-boot-starter:用于支持MyBatis数据库访问的Spring Boot Starter。
- mysql-connector-j:MySQL数据库驱动。
- lombok:用于简化Java代码编写的库。
- spring-boot-starter-test:用于支持单元测试的Spring Boot Starter。
- pagehelper-spring-boot-starter:用于支持MyBatis分页查询的Spring Boot Starter。
- spring-rabbit-test:用于RabbitMQ单元测试的Spring库。
在dependencyManagement标签中,引入了spring-boot-dependencies的pom文件,用于统一管理Spring Boot相关的依赖版本号。
在build标签中,配置了spring-boot-maven-plugin插件,用于将项目构建为一个可执行的Spring Boot应用程序,并指定了基础镜像为paketobuildpacks/builder-jammy-base:latest。
这些配置可以确保项目正确引入所需的依赖库,并且可以使用Maven构建工具来构建和打包项目。
二、配置yml
我们配置三个配置文件,一个主配置文件,一个web配置文件,一个dao的配置文件。
1、application-web.yml
server:port: 8088servlet:context-path: /ch12encoding:enabled: truecharset: UTF-8force: true
简单的配置服务器的端口号和上下文路径。
2、application-dao.yml
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:330/psm?userUnicode=true&characterEncoding=utf-8&serverTimeZone=Asia/shanghaiusername: rootpassword: 123456hikari:minimum-idle: 5maximum-pool-size: 20idle-timeout: 90000connection-timeout: 3000connection-test-query: select 1
mybatis:type-aliases-package: edu.nf.ch12.entitymapper-locations: classpath://mappers/*.xmlpagehelper:helper-dialect: mysqlreasonable: truesupport-methods-arguments: true
配置连接数据库的数据源,mybatis,以及分页插件。
3、主配置类 application.yml
spring:profiles:include: web , dao
在Spring Boot中,可以使用
spring.profiles属性来指定应用程序的配置文件。profiles属性允许您根据特定的配置文件来激活或禁用不同的功能或模块。在您的示例配置中,
spring.profiles.include属性被设置为"web"和"dao",表示您希望同时激活这两个配置文件。这意味着应用程序将加载所有与这些配置文件相关的属性和bean定义。使用
spring.profiles.include属性可以使您的应用程序在不同的环境中以不同的方式运行。例如,在开发环境中,您可以仅激活"web"配置文件,而在生产环境中,您可以同时激活"web"和"dao"配置文件。通过使用多个配置文件,您可以更好地组织和管理应用程序的配置。每个配置文件可以包含特定于某个模块或功能的属性和bean定义,使得配置更加清晰和可维护。
4、测试
运行服务器,然后在浏览器访问地址,只要能够进正常的访问controler的路径就表示没有报错。
三、配置多个yml文件的注意事项
在Spring Boot中,你可以使用多个YAML配置文件来管理不同的配置属性。以下是使用多个YAML配置文件时的一些注意事项:
-
文件命名:默认情况下,Spring Boot会加载
application.yml或application.properties作为主要的配置文件。如果你想添加额外的配置文件,可以按照以下命名规则创建文件:application-{web}.yml或application-{dao}.properties:用于特定profile的配置文件,例如application-web.yml用于开发环境。{name}-{profile}.yml或{name}-{profile}.properties:用于特定profile的特定模块的配置文件,例如database-dev.yml用于开发环境下的数据库配置。
-
配置文件的加载顺序:Spring Boot会根据默认的配置文件命名规则按照一定的顺序加载配置文件。具体的加载顺序如下:
- 加载主要的配置文件(如
application.yml)。 - 根据当前激活的profile加载相应的配置文件(如
application-dev.yml)。 - 加载其他自定义的配置文件。
- 加载主要的配置文件(如
-
配置文件的优先级:如果存在相同配置属性在多个配置文件中定义,Spring Boot会按照以下优先级来确定最终生效的配置值:
- 高优先级的配置文件会覆盖低优先级的配置文件中相同属性的值。
- 命令行参数会覆盖所有配置文件中相同属性的值。
-
自定义配置文件位置:除了默认的位置外,你还可以通过设置
spring.config.name和spring.config.location属性来指定自定义的配置文件位置和名称。例如,在启动命令中添加--spring.config.name=myconfig参数可以加载名为myconfig.yml的配置文件。 -
注意profiles和properties之间的区别:Profiles用于区分不同环境下的配置,而Properties则是配置属性本身的键值对。在YAML文件中,使用
---来分隔不同的profile配置块,使用缩进来表示配置属性的层级关系。
这些注意事项可以帮助你更好地管理和组织多个YAML配置文件,以满足不同环境和需求的配置需求。
四、SpringBoot多模块配置YAML文件有什么好处?
在Spring Boot多模块项目中,将配置信息分散在各个子模块中会使得配置管理变得困难,也容易出现冲突和重复定义的问题。因此,使用多个YAML文件来集中管理和组织配置信息有以下好处:
-
模块化:将配置信息按照模块进行划分,每个模块的配置信息都存放在自己的YAML文件中,更加清晰明了。
-
继承性:通过使用
spring.profiles.include属性可以让不同的YAML文件相互引用和继承,从而减少了重复定义和冲突问题。 -
多环境支持:通过使用不同的profile文件,可以轻松地配置不同的环境变量,如开发、测试和生产等。
-
安全性:通过使用不同的YAML文件,可以将敏感的配置信息(如数据库密码)单独存放在另一个文件中,并设置合适的访问权限,提高安全性。
-
可维护性:将配置信息分散到不同的YAML文件中,使得配置信息更易于维护和管理,也更容易进行版本控制。
综上所述,使用多个YAML文件来管理和组织Spring Boot多模块项目的配置信息,可以使配置信息更加清晰、易于管理和维护,也能帮助我们更好地实现多环境支持和安全性控制。
相关文章:
SpringBoot : ch12 多模块配置YAML文件
前言 当您使用SpringBoot框架进行项目开发时,通常需要配置一些参数和属性。在实际开发中,可能需要将这些配置参数分成多个不同的YAML文件,并将它们组织到不同的模块中。这样可以方便管理和维护配置文件,并且可以避免配置文件的冲…...
TensorRT之LeNet5部署(onnx方式)
文章目录 前言LeNet-5部署1.ONNX文件导出2.TensorRT构建阶段(TensorRT模型文件)🧁创建Builder🍧创建Network🍭使用onnxparser构建网络🍬优化网络🍡序列化模型🍩释放资源 3.TensorRT运行时阶段(推理)&#x…...
Xilinx FPGA平台DDR3设计详解(二):DDR SDRAM组成与工作过程
本文主要介绍一下DDR SDRAM的基本组成以及工作过程,方便大家更好的理解和掌握DDR的控制与读写。 一、DDR SDRAM的基本组成 1、SDRAM的基本单元 SDRAM的基本单元是一个CMOS晶体管和一个电容组成的电路。 晶体管最上面的一端,称作栅极,通过…...
ios(swiftui) 属性包装器详解
目录 1. State 2. Binding 3. ObservedObject 和Published 4. StateObject 5. EnvironmentObject和Environment 6. AppStorage 在 SwiftUI 中,属性包装器用于增强和管理视图的状态,以及处理视图与数据模型之间的绑定和交互。下面是一些常见…...
【智能家居】面向对象编程OOP和设计模式(工厂模式)
面向对象编程 类和对象 面向对象编程和面向过程编程区别 设计模式 软件设计模式按类型分 工厂模式 面向对象编程 面向对象编程(Object-Oriented Programming,OOP)是一种程序设计范式,其中程序被组织成对象的集合,每…...
Docker安装Memcached+Python调用
简介:Memcached是一个通用的分布式内存缓存系统。它通常用于通过在RAM中缓存数据和对象来加速动态数据库驱动的网站,以减少必须读取外部数据源(如数据库或API)的次数。Memcached的API提供了一个分布在多台机器上的非常大的哈希表。…...
网页开发 HTML
目录 HTML概述 HTML结构 HTML标签语法 基本标签 标题标签 换行标签 段落标签 文本格式化标签 特殊符号 div和span标签 超链接标签 锚点 img标签 列表标签 表格标签 表单标签 HTML概述 HTML,即超文本标记语言(HyperText Markup Language …...
SHAP(五):使用 XGBoost 进行人口普查收入分类
SHAP(五):使用 XGBoost 进行人口普查收入分类 本笔记本演示了如何使用 XGBoost 预测个人年收入超过 5 万美元的概率。 它使用标准 UCI 成人收入数据集。 要下载此笔记本的副本,请访问 github。 XGBoost 等梯度增强机方法对于具有…...
LeetCode 8 字符串转整数
题目描述 字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格检查下一…...
前缀和 LeetCode1423. 可获得的最大点数
几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。 你的点数就是你拿到手中的所有卡牌的点数之和。 给你一个整数数组 cardPoi…...
探索意义的深度:自然语言处理中的语义相似性
一、说明 语义相似度,反应出计算机对相同内容,不同表达的识别能力。因而识别范围至少是个句子,最大范围就是文章,其研究方法有所区别。本文将按照目前高手的研究成绩,作为谈资介绍给诸位。 二、语义相似度简介 自然语言…...
WT2605-24SS高品质录音语音芯片:实时输出、不保存本地,引领音频技术新潮流
随着科技的快速发展,高品质音频技术成为了现代社会不可或缺的一部分。在这个追求高品质、高效率的时代,唯创知音推出的WT2605-24SS高品质录音芯片,以其独特的功能和卓越的性能,引领着音频技术的新潮流。 首先,WT2605-…...
Git 合并冲突解决步骤
Git 合并冲突解决步骤 1. 找到并打开冲突文件 定位到发生冲突的文件。可以通过 Git 的命令行输出找到这些文件。例如: pom.xmlsrc/main/java/com/zzm/config/SecurityConfig.javasrc/main/java/com/zzm/service/chat/UserConversationsServiceImpl.javasrc/main/…...
Windows核心编程 注册表
目录 注册表概述 打开关闭注册表 创建删除子健 查询写入删除键值 子健和键值的枚举 常用注册表操作 注册表概述 注册表是Windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库",也可以说是一个非常巨大的树状分层结构的…...
【算法专题】二分查找
二分查找 二分查找1. 二分查找2. 在排序数组中查找元素的第一和最后一个位置3. 搜索插入位置4. x 的平方根5. 山脉数组的峰顶索引6. 寻找峰值7. 寻找旋转排序数组中的最小值8. 点名 二分查找 1. 二分查找 题目链接 -> Leetcode -704.二分查找 Leetcode -704.二分查找 题…...
中国消费电子行业发展趋势及消费者需求洞察|徐礼昭
一、引言 近年来,随着科技的飞速发展,消费电子行业面临着前所未有的挑战与机遇。本文将从行业发展趋势、消费者需求洞察以及企业数字化转型的方向和动作三个方面,对消费电子行业进行深入剖析。 二、消费电子行业发展趋势 5G技术的普及和应…...
UE学习C++(1)创建actor
创建新C类 在 虚幻编辑器 中,点击 文件(File) 下拉菜单,然后选择 新建C类...(New C Class...) 命令: 此时将显示 选择父类(Choose Parent Class) 菜单。可以选择要扩展的…...
【CTA认证】Android8实现android6以下的应用运行时也要申请权限
需求 CTA入网认证,要求低版本比如Android6以下的应用,运行时,也需要有运行时权限(Runtime Permission)功能,不能默认就取到权限,必须人工在设置中打开才可。 环境 Android 8 实现 frameworks 修改思路是所有APP都…...
gRPC Java、Go、PHP使用例子
文章目录 1、Protocol Buffers定义接口1.1、编写接口服务1.2、Protobuf基础数据类型 2、服务器端实现2.1、生成gRPC服务类2.2、Java服务器端实现 3、java、go、php客户端实现3.1、Java客户端实现3.2、Go客户端实现3.3、PHP客户端实现 本文例子是在Window平台测试,Ja…...
前端知识笔记(十九)———px,em,rem,vw,vh之间的区别
一,px(像素):像素是屏幕上显示的最小单位,它是固定的,不随页面缩放而改变大小。在响应式设计中,使用像素单位可能会导致布局在不同屏幕尺寸上显示不一致。例如:现在在你电脑上一个字…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
