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数据库。本…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...