Java_Springboot核心配置详解
Spring Boot以其简洁、高效和约定优于配置的理念,极大地简化了Java应用的开发流程。在Spring Boot中,核心配置是应用启动和运行的基础。本文将详细介绍Spring Boot中的两种配置文件格式、基础注解的配置方式、自定义配置以及多环境配置。
一、Spring Boot中的两种配置文件格式
Spring Boot官方提供了两种常用的配置文件格式:properties和YAML(yml)。这两种格式各有特点,可以根据项目需求选择合适的格式。
- properties文件
properties文件是一种传统的配置文件格式,以“key=value”的形式存储配置信息。例如:
properties
server.port=8080 | |
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase | |
spring.datasource.username=root | |
spring.datasource.password=password |
properties文件的特点如下:
1文件结构简单,易于理解和编辑。
2只支持键值对,不支持复杂的嵌套结构。
3不保证加载顺序,适用于简单的配置需求。
2.YAML文件
YAML(YAML Ain't Markup Language)是一种直观的、易于人类阅读和编写的数据序列化格式。YAML文件以“key: value”的形式存储配置信息,支持复杂的嵌套结构和列表。例如:
yaml
server: | |
port: 8080 | |
spring: | |
datasource: | |
url: jdbc:mysql://localhost:3306/mydatabase | |
username: root | |
password: password |
YAML文件的特点如下:
- 层次结构清晰,易于表达复杂的配置信息。
- 支持字面量、对象和数组三种数据结构,以及复合结构。
- 大小写敏感,缩进表示层级关系,不能使用Tab键代替空格。
在Spring Boot项目中,YAML文件通常命名为application.yml或application.yaml,并放置在src/main/resources目录下。
二、Spring Boot基础注解的方式实现配置
Spring Boot提供了多种注解来简化配置过程,其中@Value和@ConfigurationProperties是两个常用的注解。
1.@Value注解
@Value注解用于将配置文件中的值注入到Spring Bean的属性中。例如:
java
@Component | |
public class DatabaseConfig { | |
@Value("${spring.datasource.url}") | |
private String dbUrl; | |
@Value("${spring.datasource.username}") | |
private String dbUsername; | |
@Value("${spring.datasource.password}") | |
private String dbPassword; | |
// 省略getter和setter方法 | |
} |
@Value注解可以读取properties和YAML文件中的配置值,并注入到指定的属性中。需要注意的是,@Value注解不支持复杂的数据类型,如List、Map等。
2.@ConfigurationProperties注解
@ConfigurationProperties注解用于将配置文件中的值批量注入到Spring Bean的属性中,并支持复杂的数据类型。例如:
java
@Component | |
@ConfigurationProperties(prefix = "spring.datasource") | |
public class DatabaseConfig { | |
private String url; | |
private String username; | |
private String password; | |
// 省略getter和setter方法 | |
} |
在上面的例子中,@ConfigurationProperties注解将spring.datasource前缀下的配置值注入到DatabaseConfig类的属性中。与@Value注解相比,@ConfigurationProperties注解更加灵活和强大,支持松散绑定、JSR303数据校验和复杂类型封装等特性。
三、自定义配置
除了使用Spring Boot默认的配置文件外,还可以通过自定义配置类的方式来管理配置项。自定义配置类通常使用@Configuration和@ConfigurationProperties注解进行标注。
1.创建自定义配置类
创建一个自定义配置类,并使用@Configuration和@ConfigurationProperties注解进行标注。例如:
java
@Configuration | |
@ConfigurationProperties(prefix = "myapp") | |
public class MyAppConfig { | |
private String apiUrl; | |
private String apiKey; | |
// 省略getter和setter方法 | |
} |
在上面的例子中,MyAppConfig类用于管理myapp前缀下的配置项。
2.使用自定义配置类
在需要使用自定义配置类的地方,通过@Autowired注解将其注入到Spring Bean中。例如:
java
@Component | |
public class MyApiClient { | |
private final MyAppConfig appConfig; | |
@Autowired | |
public MyApiClient(MyAppConfig appConfig) { | |
this.appConfig = appConfig; | |
} | |
public void callApi() { | |
String apiUrl = appConfig.getApiUrl(); | |
String apiKey = appConfig.getApiKey(); | |
// 使用配置的API URL和API Key进行操作 | |
} | |
} |
在上面的例子中,MyApiClient类通过构造函数注入MyAppConfig对象,并在callApi方法中使用配置信息。
四、多环境配置
在实际开发中,通常需要为不同的环境(如开发、测试、生产)配置不同的参数。Spring Boot提供了多环境配置的功能,可以根据不同的环境加载不同的配置文件。
1.创建多环境配置文件
在src/main/resources目录下创建多个以application-{profile}.properties或application-{profile}.yml命名的配置文件,其中{profile}表示环境名称。例如:
- application-dev.properties(开发环境)
- application-test.properties(测试环境)
- application-prod.properties(生产环境)
或者:
1.application-dev.yml(开发环境)
2.application-test.yml(测试环境)
3.application-prod.yml(生产环境)
2.指定活动环境
在启动Spring Boot应用时,可以通过spring.profiles.active属性来指定当前活动的环境。例如:
shell
java -jar myapp.jar --spring.profiles.active=dev |
或者,在application.properties或application.yml文件中指定默认的活动环境:
properties
spring.profiles.active=dev |
yaml
spring: | |
profiles: | |
active: dev |
- 加载多环境配置
Spring Boot会根据指定的活动环境加载相应的配置文件,并覆盖默认配置文件中的相同配置项。例如,如果开发环境的数据库连接信息与默认配置不同,可以在application-dev.properties或application-dev.yml文件中进行配置。
五、总结
Spring Boot的核心配置是应用启动和运行的基础。本文详细介绍了Spring Boot中的两种配置文件格式(properties和YAML)、基础注解的配置方式(@Value和@ConfigurationProperties)、自定义配置以及多环境配置。通过合理使用这些配置方式,可以简化开发流程、提高开发效率,并增强应用的灵活性和可维护性。
相关文章:

Java_Springboot核心配置详解
Spring Boot以其简洁、高效和约定优于配置的理念,极大地简化了Java应用的开发流程。在Spring Boot中,核心配置是应用启动和运行的基础。本文将详细介绍Spring Boot中的两种配置文件格式、基础注解的配置方式、自定义配置以及多环境配置。 一、Spring Bo…...

太速科技-9-基于DSP TMS320C6678+FPGA XC7V690T的6U VPX信号处理卡
基于DSP TMS320C6678FPGA XC7V690T的6U VPX信号处理卡 一、概述 本板卡基于标准6U VPX 架构,为通用高性能信号处理平台,系我公司自主研发。板卡采用一片TI DSP TMS320C6678和一片Xilinx公司Virtex 7系列的FPGA XC7V690T-2FFG1761I作为主处理器&#…...

在线UI设计工具:创意与效率的结合
随着UI设计领域的快速增长,设计师们纷纷投身于这一行业,选择一款合适的UI设计工具变得至关重要。除了经典的UI设计软件,在线UI设计工具因其灵活性和便捷性,越来越受到设计师们的喜爱。这种不受时间和地点限制,且不依赖…...

【MyBatis源码】SqlSessionFactoryBuilder源码分析
文章目录 概述类结构从 InputStream 创建 SqlSessionFactoryXMLConfigBuilder构建ConfigurationXMLConfigBuilder初始化方法parse()方法parseConfiguration属性(properties) 概述 SqlSessionFactory 是 MyBatis 的核心接口之一,提供创建 Sql…...
Percona XtraBackup数据备份方案
一、简介 官方文档:https://docs.percona.com/percona-xtrabackup/innovation-release/index.html Percona XtraBackup 是一款适用于基于 MySQL 的服务器的开源热备份实用程序,可让您的数据库在计划的维护时段内保持完全可用。无论是 24x7 高负载服务器还是低交易量服务器,…...

聚“芯”而行,华普微亮相第五届Silicon Labs Works With大会
2024年10月24日,由致力于以安全、智能无线连接技术建立更互联世界的全球领导厂商Silicon Labs主办的第五届Works With开发者大会在上海雅乐居万豪侯爵酒店成功举办。 作为全球性的物联网年度“盛宴”,本届大会群英荟萃,不仅有着来自生态大厂的…...

Java 用户随机选择导入ZIP文件,解压内部word模板并入库,Windows/可视化Linux系统某麒麟国防系统...均可适配
1.效果 压缩包内部文件 2.依赖 <!--支持Zip--><dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>2.11.5</version></dependency>总之是要File类变MultipartFile类型的 好像是…...

【C++】C++17结构化绑定、std::optional、std::variant、std::any
二十二、C17中的结构化绑定、std::optional、std::variant、std::any 本部分是一个小系列,介绍C17中新引入的、用来解决各种不同返回情况的、标准库新组件。 1、C的结构化绑定 结构化绑定structured bindings是C17中引入的一项特性,它允许开发者方便地…...
C#的起源。J++语言的由来?J#和J++傻傻分不清?
C#的起源 C#读音是C Sharp, 它是微软为了对抗Java而生,最早是J,效率比Java还好,后来被Sun公司起诉J破坏了平台无关性,微软重新开发C#. C#和Java一样都定位为中间件语言,用虚拟机执行编译的字节码以达到跨平台目的。从语…...

Flutter 在 对接 google play 时,利用 android studio 可视化生成 已签名的aab包
android studio 可视化生成 aab包 第一 : 先说注意事项 在Flutter项目里面,直接打开当前项目是不行的,不显示相应操作,需要在Android 目录打开,直白点就是直接打开项目里面的Android 目录 不然会出现的一些问题 第一…...

使用web.dev提供的工具实现浏览器消息推送服务
文章目录 前言实现工具和效果实现原理实现过程前端接收用户订阅请求将用户订阅信息更新到后端后端实现接收并保存订阅信息的接口后端实现消息推送的逻辑前言 对于电商独立站来说,新品上架或者促销活动上线及时通知到用户是很重要的,通知的渠道有很多,其中就包括浏览器消息推…...
计算机系统结构为什么用architecture 而不是structure?
architecture本意是建筑学、建筑艺术,其含义就是建筑的样子和背后的设计思想,用于计算机科学可以表达计算机的系统结构和后面的设计原理:它长什么样?它为什么长这样? 与architecture 对应的词是structure (…...

sqoop问题汇总记录
此篇博客仅记录在使用sqoop时遇到的各种问题。持续更新,有问题评论区一起探讨,写得有不足之处见谅。 Oracle_to_hive 1. main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTr…...
Git 创建新的分支但清空提交记录
有时候需要创建新的分支,但是原有分支的提交非常多,不好区分哪些是创建分支之后的提交。 那么就把原分支的提交全部去掉 要从 分支1 创建 分支2,并确保 分支2 不包含任何提交历史,同时文件与 分支1 的最后一次提交一致࿰…...
SQL PRIMARY KEY
SQL PRIMARY KEY 概述 在关系型数据库中,主键(PRIMARY KEY)是一个非常重要的概念。它是表中每一行数据的唯一标识符,用于保证数据的完整性和准确性。本文将详细介绍SQL中的主键,包括其定义、作用、如何创建和修改主键…...

软件测试学习笔记丨Flask操作数据库-对象与数据模型
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/23440 对象与数据模型 数据模型:是数据特征的抽象,抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架…...

IntelliJ IDEA使用 MybatisX-Generator 插件 自动生成Entity+Mapper+Mapper.xml等代码
一、Intellij安装MybatisX插件: 首先点击 Intellij->Preference->Plugins,然后搜索MybatisX,点击安装: 2 打开数据库 在IntelliJ IDEA 连接Mysql数据库,选择表,点击右键,选择 Mybatis…...

vue中如何为不同功能设置不同的默认打印设置(设置不同的打印机)
浏览器自带的window.print 功能较简单,这里使用LODOP露肚皮打印 以下是vue2示例: 从官网中下载Lodop和C-Lodop官网主站安装包并安装到本地电脑可以全局搜索电脑找到安装文件LodopFuncs.js,也可以直接复制我贴出来的文件 //用双端口加载主JS…...

经纬恒润INTEWORK-VBA新版本正式发布
在汽车电子研发领域,随着开发测试的深入,工程师们常常面临着一个共同的问题:如何高效地在多样化的开发测试场景中切换,并确保不同工具间的紧密协作。不同场景、不同工具的切换与使用给工程师带来高昂的学习成本和前后端信息传递的…...

金蝶云数据集成至MySQL的高效解决方案
金蝶云数据集成至MySQL的高效解决方案 金蝶云星空数据集成到MySQL的技术案例分享 在企业信息化过程中,数据的高效集成和管理是关键环节。本文将聚焦于一个具体的系统对接集成案例:金蝶云星空的数据如何通过轻易云数据集成平台无缝对接到MySQL数据库。本…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
核心速览 研究背景 研究问题:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…...

开疆智能Ethernet/IP转Modbus网关连接鸣志步进电机驱动器配置案例
在工业自动化控制系统中,常常会遇到不同品牌和通信协议的设备需要协同工作的情况。本案例中,客户现场采用了 罗克韦尔PLC,但需要控制的变频器仅支持 ModbusRTU 协议。为了实现PLC 对变频器的有效控制与监控,引入了开疆智能Etherne…...

篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...

【动态规划】B4336 [中山市赛 2023] 永别|普及+
B4336 [中山市赛 2023] 永别 题目描述 你做了一个梦,梦里有一个字符串,这个字符串无论正着读还是倒着读都是一样的,例如: a b c b a \tt abcba abcba 就符合这个条件。 但是你醒来时不记得梦中的字符串是什么,只记得…...

【RabbitMQ】- Channel和Delivery Tag机制
在 RabbitMQ 的消费者代码中,Channel 和 tag 参数的存在是为了实现消息确认机制(Acknowledgment)和精细化的消息控制。 Channel 参数 作用 Channel 是 AMQP 协议的核心操作接口,通过它可以直接与 RabbitMQ 交互: 手…...