前言
当您使用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: 8088
servlet:
context-path: /ch12
encoding:
enabled: true
charset: UTF-8
force: true
简单的配置服务器的端口号和上下文路径。
2、application-dao.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:330/psm?userUnicode=true&characterEncoding=utf-8&serverTimeZone=Asia/shanghai
username: root
password: 123456
hikari:
minimum-idle: 5
maximum-pool-size: 20
idle-timeout: 90000
connection-timeout: 3000
connection-test-query: select 1
mybatis:
type-aliases-package: edu.nf.ch12.entity
mapper-locations: classpath://mappers/*.xml
pagehelper:
helper-dialect: mysql
reasonable: true
support-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多模块项目的配置信息,可以使配置信息更加清晰、易于管理和维护,也能帮助我们更好地实现多环境支持和安全性控制。