当前位置: 首页 > news >正文

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配置文件时的一些注意事项:

  1. 文件命名:默认情况下,Spring Boot会加载application.ymlapplication.properties作为主要的配置文件。如果你想添加额外的配置文件,可以按照以下命名规则创建文件:

    • application-{web}.ymlapplication-{dao}.properties:用于特定profile的配置文件,例如application-web.yml用于开发环境。
    • {name}-{profile}.yml{name}-{profile}.properties:用于特定profile的特定模块的配置文件,例如database-dev.yml用于开发环境下的数据库配置。
  2. 配置文件的加载顺序:Spring Boot会根据默认的配置文件命名规则按照一定的顺序加载配置文件。具体的加载顺序如下:

    • 加载主要的配置文件(如application.yml)。
    • 根据当前激活的profile加载相应的配置文件(如application-dev.yml)。
    • 加载其他自定义的配置文件。
  3. 配置文件的优先级:如果存在相同配置属性在多个配置文件中定义,Spring Boot会按照以下优先级来确定最终生效的配置值:

    • 高优先级的配置文件会覆盖低优先级的配置文件中相同属性的值。
    • 命令行参数会覆盖所有配置文件中相同属性的值。
  4. 自定义配置文件位置:除了默认的位置外,你还可以通过设置spring.config.namespring.config.location属性来指定自定义的配置文件位置和名称。例如,在启动命令中添加--spring.config.name=myconfig参数可以加载名为myconfig.yml的配置文件。

  5. 注意profiles和properties之间的区别:Profiles用于区分不同环境下的配置,而Properties则是配置属性本身的键值对。在YAML文件中,使用---来分隔不同的profile配置块,使用缩进来表示配置属性的层级关系。

这些注意事项可以帮助你更好地管理和组织多个YAML配置文件,以满足不同环境和需求的配置需求。

 

四、SpringBoot多模块配置YAML文件有什么好处?

在Spring Boot多模块项目中,将配置信息分散在各个子模块中会使得配置管理变得困难,也容易出现冲突和重复定义的问题。因此,使用多个YAML文件来集中管理和组织配置信息有以下好处:

  1. 模块化:将配置信息按照模块进行划分,每个模块的配置信息都存放在自己的YAML文件中,更加清晰明了。

  2. 继承性:通过使用spring.profiles.include属性可以让不同的YAML文件相互引用和继承,从而减少了重复定义和冲突问题。

  3. 多环境支持:通过使用不同的profile文件,可以轻松地配置不同的环境变量,如开发、测试和生产等。

  4. 安全性:通过使用不同的YAML文件,可以将敏感的配置信息(如数据库密码)单独存放在另一个文件中,并设置合适的访问权限,提高安全性。

  5. 可维护性:将配置信息分散到不同的YAML文件中,使得配置信息更易于维护和管理,也更容易进行版本控制。

综上所述,使用多个YAML文件来管理和组织Spring Boot多模块项目的配置信息,可以使配置信息更加清晰、易于管理和维护,也能帮助我们更好地实现多环境支持和安全性控制。

相关文章:

SpringBoot : ch12 多模块配置YAML文件

前言 当您使用SpringBoot框架进行项目开发时&#xff0c;通常需要配置一些参数和属性。在实际开发中&#xff0c;可能需要将这些配置参数分成多个不同的YAML文件&#xff0c;并将它们组织到不同的模块中。这样可以方便管理和维护配置文件&#xff0c;并且可以避免配置文件的冲…...

TensorRT之LeNet5部署(onnx方式)

文章目录 前言LeNet-5部署1.ONNX文件导出2.TensorRT构建阶段(TensorRT模型文件)&#x1f9c1;创建Builder&#x1f367;创建Network&#x1f36d;使用onnxparser构建网络&#x1f36c;优化网络&#x1f361;序列化模型&#x1f369;释放资源 3.TensorRT运行时阶段(推理)&#x…...

Xilinx FPGA平台DDR3设计详解(二):DDR SDRAM组成与工作过程

本文主要介绍一下DDR SDRAM的基本组成以及工作过程&#xff0c;方便大家更好的理解和掌握DDR的控制与读写。 一、DDR SDRAM的基本组成 1、SDRAM的基本单元 SDRAM的基本单元是一个CMOS晶体管和一个电容组成的电路。 晶体管最上面的一端&#xff0c;称作栅极&#xff0c;通过…...

ios(swiftui) 属性包装器详解

目录 1. State 2. Binding 3. ObservedObject 和Published 4. StateObject 5. EnvironmentObject和Environment 6. AppStorage 在 SwiftUI 中&#xff0c;属性包装器用于增强和管理视图的状态&#xff0c;以及处理视图与数据模型之间的绑定和交互。下面是一些常见…...

【智能家居】面向对象编程OOP和设计模式(工厂模式)

面向对象编程 类和对象 面向对象编程和面向过程编程区别 设计模式 软件设计模式按类型分 工厂模式 面向对象编程 面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;是一种程序设计范式&#xff0c;其中程序被组织成对象的集合&#xff0c;每…...

Docker安装Memcached+Python调用

简介&#xff1a;Memcached是一个通用的分布式内存缓存系统。它通常用于通过在RAM中缓存数据和对象来加速动态数据库驱动的网站&#xff0c;以减少必须读取外部数据源&#xff08;如数据库或API&#xff09;的次数。Memcached的API提供了一个分布在多台机器上的非常大的哈希表。…...

网页开发 HTML

目录 HTML概述 HTML结构 HTML标签语法 基本标签 标题标签 换行标签 段落标签 文本格式化标签 特殊符号 div和span标签 超链接标签 锚点 img标签 列表标签 表格标签 表单标签 HTML概述 HTML&#xff0c;即超文本标记语言&#xff08;HyperText Markup Language …...

SHAP(五):使用 XGBoost 进行人口普查收入分类

SHAP&#xff08;五&#xff09;&#xff1a;使用 XGBoost 进行人口普查收入分类 本笔记本演示了如何使用 XGBoost 预测个人年收入超过 5 万美元的概率。 它使用标准 UCI 成人收入数据集。 要下载此笔记本的副本&#xff0c;请访问 github。 XGBoost 等梯度增强机方法对于具有…...

LeetCode 8 字符串转整数

题目描述 字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃无用的前导空格检查下一…...

前缀和 LeetCode1423. 可获得的最大点数

几张卡牌 排成一行&#xff0c;每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动&#xff0c;你可以从行的开头或者末尾拿一张卡牌&#xff0c;最终你必须正好拿 k 张卡牌。 你的点数就是你拿到手中的所有卡牌的点数之和。 给你一个整数数组 cardPoi…...

探索意义的深度:自然语言处理中的语义相似性

一、说明 语义相似度&#xff0c;反应出计算机对相同内容&#xff0c;不同表达的识别能力。因而识别范围至少是个句子&#xff0c;最大范围就是文章&#xff0c;其研究方法有所区别。本文将按照目前高手的研究成绩&#xff0c;作为谈资介绍给诸位。 二、语义相似度简介 自然语言…...

WT2605-24SS高品质录音语音芯片:实时输出、不保存本地,引领音频技术新潮流

随着科技的快速发展&#xff0c;高品质音频技术成为了现代社会不可或缺的一部分。在这个追求高品质、高效率的时代&#xff0c;唯创知音推出的WT2605-24SS高品质录音芯片&#xff0c;以其独特的功能和卓越的性能&#xff0c;引领着音频技术的新潮流。 首先&#xff0c;WT2605-…...

Git 合并冲突解决步骤

Git 合并冲突解决步骤 1. 找到并打开冲突文件 定位到发生冲突的文件。可以通过 Git 的命令行输出找到这些文件。例如&#xff1a; pom.xmlsrc/main/java/com/zzm/config/SecurityConfig.javasrc/main/java/com/zzm/service/chat/UserConversationsServiceImpl.javasrc/main/…...

Windows核心编程 注册表

目录 注册表概述 打开关闭注册表 创建删除子健 查询写入删除键值 子健和键值的枚举 常用注册表操作 注册表概述 注册表是Windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库"&#xff0c;也可以说是一个非常巨大的树状分层结构的…...

【算法专题】二分查找

二分查找 二分查找1. 二分查找2. 在排序数组中查找元素的第一和最后一个位置3. 搜索插入位置4. x 的平方根5. 山脉数组的峰顶索引6. 寻找峰值7. 寻找旋转排序数组中的最小值8. 点名 二分查找 1. 二分查找 题目链接 -> Leetcode -704.二分查找 Leetcode -704.二分查找 题…...

中国消费电子行业发展趋势及消费者需求洞察|徐礼昭

一、引言 近年来&#xff0c;随着科技的飞速发展&#xff0c;消费电子行业面临着前所未有的挑战与机遇。本文将从行业发展趋势、消费者需求洞察以及企业数字化转型的方向和动作三个方面&#xff0c;对消费电子行业进行深入剖析。 二、消费电子行业发展趋势 5G技术的普及和应…...

UE学习C++(1)创建actor

创建新C类 在 虚幻编辑器 中&#xff0c;点击 文件&#xff08;File&#xff09; 下拉菜单&#xff0c;然后选择 新建C类...&#xff08;New C Class...&#xff09; 命令&#xff1a; 此时将显示 选择父类&#xff08;Choose Parent Class&#xff09; 菜单。可以选择要扩展的…...

【CTA认证】Android8实现android6以下的应用运行时也要申请权限

需求 CTA入网认证&#xff0c;要求低版本比如Android6以下的应用&#xff0c;运行时&#xff0c;也需要有运行时权限(Runtime Permission)功能&#xff0c;不能默认就取到权限&#xff0c;必须人工在设置中打开才可。 环境 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平台测试&#xff0c;Ja…...

前端知识笔记(十九)———px,em,rem,vw,vh之间的区别

一&#xff0c;px&#xff08;像素&#xff09;&#xff1a;像素是屏幕上显示的最小单位&#xff0c;它是固定的&#xff0c;不随页面缩放而改变大小。在响应式设计中&#xff0c;使用像素单位可能会导致布局在不同屏幕尺寸上显示不一致。例如&#xff1a;现在在你电脑上一个字…...

docker部署frp穿透内网

文章目录 &#xff08;1&#xff09;部署frps服务器&#xff08;2&#xff09;部署frpc客户端&#xff08;3&#xff09;重启与访问frp&#xff08;4&#xff09;配置nginx反向代理 &#xff08;1&#xff09;部署frps服务器 docker安装参考文档&#xff1a;docker基本知识 1…...

使用pytorch从零开始实现迷你GPT

生成式建模知识回顾: [1] 生成式建模概述 [2] Transformer I&#xff0c;Transformer II [3] 变分自编码器 [4] 生成对抗网络&#xff0c;高级生成对抗网络 I&#xff0c;高级生成对抗网络 II [5] 自回归模型 [6] 归一化流模型 [7] 基于能量的模型 [8] 扩散模型 I, 扩散模型 II…...

tp6框架 万级数据入库 php函数优化

将万级数据入库并判断有无 没有则新增 上篇是用mysql的replace into实现 本篇是另一种方法 这是我的数据格式&#xff1a; $data [ [ KCH > value1, other_column1 > value_other1_1, other_column2 > value_other2_1, ], [ KCH > value2, other_column…...

TwinCAT3一个PLC设备里多个程序工程之间通讯

目录 1、创建TwinCAT3工程&#xff0c;再分别创建两个PLC程序工程 2、PLC1工程中添加如下代码&#xff0c;然后编译重新生成PLC1工程 3、PLC2工程中添加如下代码&#xff0c;然后编译重新生成PLC2工程 4、变量关联 5、一个PLC运行多个PLC工程设置 7、工程下载链接 1、创建…...

python弹球小游戏

import pygame import random# 游戏窗口大小 WIDTH 800 HEIGHT 600# 定义颜色 WHITE (255, 255, 255) BLACK (0, 0, 0) RED (255, 0, 0) GREEN (0, 255, 0) BLUE (0, 0, 255)# 球的类 class Ball:def __init__(self):self.radius 10self.speed [random.randint(2, 4),…...

mongoose学习记录

mongoose安装和连接数据库 npm i mongoose导入mongoose const mongoose require(mongoose) mongoose.set("strictQuery",true)连接数据库 mongoose.connect(mongodb:127.0.0.1:27017/test)设置回调 mongoose.connection.on(open,()>{console.log("连接成…...

边缘与云或边缘加云:前进的方向是什么?

边缘计算使数据处理更接近数据源&#xff0c;以及由此产生的行动或决策的对象。通过设计&#xff0c;它可以改变数十亿物联网和其他设备存储、处理、分析和通信数据的方式。 边缘计算使数据处理更接近数据源&#xff0c;以及由此产生的行动或决策的对象。这与传统的体系结构形成…...

蓝桥杯第1037题子串分值和 C++ 字符串 逆向思维 巧解

题目 思路和解题方法 方案一——遍历哈希表 仅能过60%样例,大多数同学都用的该方法&#xff0c;就不过多赘述 #include <iostream> #include <unordered_map> using namespace std; int main() {string s;cin >> s;int n s.size();int res n;for (int i 0…...

力扣题:字符串的反转-11.23

力扣题-11.23 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;557. 反转字符串中的单词 III 解题思想&#xff1a;先读取单词&#xff0c;然后将单词进行翻转即可 class Solution(object):def reverseWords(self, s):""":type s…...

【软件测试】盘一盘工作中遇到的 Redis 异常测试

在测试工作中&#xff0c;涉及到与 redis 交互的场景变的越来越多了。关于redis本身就不作赘述了&#xff0c;网上随便搜&#xff0c;本人也做过一些整理。 今天只来复盘一下&#xff0c;在测试过程中与 redis 的二三事儿。其中提到的案例是经过抽象化的&#xff0c;用作辅助说…...