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

【Spring Boot 】Spring Boot 常用配置总结

文章目录

  • 前言
  • 1.多环境配置
    • application.properties
    • application.yaml
  • 2.常用配置
  • 3.配置读取
  • 4.自定义配置

前言

在涉及项目开发时,通常我们会灵活地把一些配置项集中在一起,如果你的项目不是很大的情况下,那么通过配置文件集中不失为一个很好的解决方案。
在 Spring Boot 中,我们可以方便地通过读取 appliction.properties/application.yaml 格式的配置文件,进而注入我们的项目中。

1.多环境配置

在日常开发中,我们的环境根据不同的阶段会有一定不同,总的可以分为:dev、test、prod,举个简单的例子,不同的环境中如 port 可能是不同的。
上文中提到配置文件多以 appliction.properties/application.yaml 这两种格式为主,下面分别就这两种格式对多环境的配置做个说明。

application.properties

在这种格式中,主配置文件是 application.properties,对于不同环境的配置,通常我们会命名为 application-xxx.properties,这里的 xxx 可以是 dev、test、prod 中一种,比如我们的 主配置文件(appliction.properties) 内容如下:
properties

server.portspring.profiles.active=dev

这样配置读取时,就会去 application-dev.properties 中读取相关的配置,其他同理。

application.yaml

熟悉 yaml 的小伙伴对其格式肯定不陌生,通常都是同级内容对齐,分级项通过另启一行,且通常需要固定的空格缩进,一般是2个空格,这里不多说,格式问题自行搜索。
我们假定主配置文件是 application.yaml,其他环境的配置文件是:application-dev.yaml/application-test.yaml/application-prod.yaml 。
这里我们看看在看看 yaml 主配置文件中怎么配置:

server:port: 8080spring:profiles:active: dev  

2.常用配置

通常我们的配置应该包含如下选项:

  • server运行配置,如端口,ip,是否SSL,超时时间,多线程等
  • server的介绍信息配置
  • 日志配置信息,又或者日志部分单独配置
  • 数据库的配置信息
  • 缓存的配置信息

比如,我们的配置项可以是以下信息:

# server
server:port: 8000tomcat:threads:max: 10min-spare: 3uri-encoding: UTF-8# self define
app:name: springDemodesc: a-spring-boot-appversion: 1.0.0author: Alice-Knight# logging
logging:file:name: app.logpath: ../logslogback:rollingpolicy:max-file-size: 5MBmax-history: 15pattern:dateformat: yyyy-mm-ddTHH:MM:ss.SSSXXX# database & cache & es
spring:datasource:url: jdbc:mysql://localhost:3306/demousername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverdata:redis:database: 0connect-timeout: 120port: 6379host: 0.0.0.0jedis:pool:enabled: truemax-active: 10min-idle: 2elasticsearch:uris:- http://localhost:9200username: adminpassword: 123456connection-timeout: 120s

3.配置读取

@Value("${field}")

通过注解 @Value 解析配置中的字段,新建个控制器类,主要功能就是返回 app 的 info:

package com.example.demo;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;@RestController
public class RestfulController {@Value("${app.version}")private String version;@Value("${app.author}")private String author;@Value("${app.desc}")private String desc;@GetMapping(value = "/appInfo")public Object getAppInfo() {Map<String, String> info = new HashMap<>();info.put("version", version);info.put("author", author);info.put("desc", desc);return info;}
}

测试:
在这里插入图片描述

从结果中可以看到,返回的响应体包含我们配置文件中的字段信息。

@Component + @ConfigurationProperties + @AutoWired

这里我们用到自动装配注解。首先实现对象类,就是一个 Bean, 然后类加上注解:

@Component
@ConfigurationProperties(prefix = "app")

其次在使用到的控制类中设置变量,加上注解 @AutoWired,具体实现如下:
AppInfo.java

package com.example.demo;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "app")
public class AppInfo {private String author;private String desc;private String version;public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public String getVersion() {return version;}public void setVersion(String version) {this.version = version;}
}

AppInfoController.java

package com.example.demo;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;@RestController
public class AppInfoController {@Autowiredprivate AppInfo appInfo;@GetMapping(value = "/v2/appInfo")public Object getAppInfoV2() {Map<String, String> info = new HashMap<>();info.put("version", appInfo.getVersion());info.put("author", appInfo.getAuthor());info.put("desc", appInfo.getDesc());return info;}
}

测试结果:
在这里插入图片描述

从结果中可以看到采用该方法也可以实现配置项的读取。

4.自定义配置

比如我们在配置文件中定义了这个 app 的name、开发者、版本号等,即如下:

app:name: demoauthor: david-knightversion: 1.0.0
...

这个自定义的内容,我们又怎么获取呢?
先写个 Bean 来接收 app 的字段:

package com.example.springbootdemo2.param;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "app")
public class AppInfo {private String name;private String desc;private String version;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public String getVersion() {return version;}public void setVersion(String version) {this.version = version;}
}

然后在 控制器类中 自动装配 Object:

package com.example.springbootdemo2.controller;import com.example.springbootdemo2.param.AppInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;@RestController
@RequestMapping(value = "/app")
public class AppInfoController {@Autowiredprivate AppInfo appinfo;@GetMapping(value = "/info")public Object getAppInfo() {Map<String, Object> info = new HashMap<>();info.put("name", appinfo.getName());info.put("desc", appinfo.getDesc());info.put("version", appinfo.getVersion());return info;}}

上面添加注解时,提示有点小问题,根据官方建议,在 pom.xml 中添加 配置依赖:

<!-- 配置处理 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

看看测试效果:
在这里插入图片描述

从结果中可以看到,配置项已经成功读取到。

相关文章:

【Spring Boot 】Spring Boot 常用配置总结

文章目录 前言1.多环境配置application.propertiesapplication.yaml 2.常用配置3.配置读取4.自定义配置 前言 在涉及项目开发时&#xff0c;通常我们会灵活地把一些配置项集中在一起&#xff0c;如果你的项目不是很大的情况下&#xff0c;那么通过配置文件集中不失为一个很好的…...

Day60力扣打卡

打卡记录 1682分了记录下&#xff0c;希望下回能突破1700捏&#x1f923;&#x1f923;。作为一个菜鸟&#x1f628;&#xff0c;知道自己不太行&#x1f62d;&#x1f44a;&#xff0c;从以前的周赛稳定1题到稳定2题&#x1f97a;&#xff0c;到现在的时有时无的3题&#x1f9…...

Axure的动态图使用以及说明

认识Axure动态图 Axure动态图是Axure中的一种功能&#xff0c;它允许用户在原型中添加动画效果和交互动作&#xff0c;使原型更加生动和具有真实的用户体验。用户可以通过添加动态图来展示页面过渡、按钮点击、下拉菜单等交互操作的效果。 这是&#xff1a;就是我们今天要叫的…...

力扣 | 437. 路径总和 III

437. 路径总和 III mport java.util.ArrayList; import java.util.List;/*** int的取值范围&#xff1a;* -2^31 ~ 2^31-1* <p>* -2147483648 ~ 2147483647&#xff08;约等于10的9次方&#xff09;* <p>* long long的取值范围&#xff1a;* -2^63 ~ (2^63-1&…...

如何部署自己的服务渲染页面为Pdf文档

前言 相信大家都觉得官方发布的文档生成模块https://docs.mendix.com/appstore/modules/document-generation/很有用&#xff0c;它能把Mendix页面像素级导出到Pdf文件中&#xff0c;这对于归档等业务非常有价值。但部署依赖公有云提供的渲染服务&#xff0c;而中国本土用户对…...

常用的调试方法(段错误产生原因)

C 语言中常用的调试技巧和 demo C语言中常用的调试方法 打印调试信息 GDB 调试器 编写单元测试 段错误产生原因 初学时两种常用的段错误调试方法 C 语言中常用的调试技巧和 demo 当程序员进行调试时&#xff0c;他们通常会使用一些调试语句或技巧来帮助他们理解代码的执行过程…...

[云原生] Docker 入门指南:镜像、容器、卷和网络解析

Docker 是一种流行的容器化平台&#xff0c;它以其强大的功能和易用性在软件开发和部署领域广受欢迎。本文将带领您逐步探索 Docker 中的四个核心概念&#xff1a;镜像、容器、卷和网络。通过了解这些概念的是什么、为什么以及如何使用&#xff0c;您将能够更好地理解和利用 Do…...

机器学习-聚类问题

前言 聚类算法又叫做”无监督分类“&#xff0c;目标是通过对无标记训练样本来揭示数据的内在性质及 规律&#xff0c;为进一步的数据分析提供基础。 Kmeans 作为聚类算法的典型代表&#xff0c;Kmeans可以说是最简单的聚类算法&#xff0c;没有之一&#xff0c;那她是怎么完…...

leetcode9.回文数java解法

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&…...

图论专栏一《图的基础知识》

图论&#xff08;Graph Theory&#xff09;是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形&#xff0c;这种图形通常用来描述某些实体之间的某种特定关系&#xff0c;用点代表实体&#xff0c;用连接两点的线表示两个实体间具有的…...

得帆云为玉柴打造CRM售后服务管理系统,实现服务全过程管理|基于得帆云低代码的CRM案例系列

广西玉柴机器股份有限公司 广西玉柴机器股份有限公司始建于1992年&#xff0c;是国内行业首家赴境外上市的中外合资企业&#xff0c;产品远销亚欧美非等180多个国家和地区。公司总部设在广西玉林市&#xff0c;下辖11家子公司&#xff0c;生产基地布局广西、江苏、安徽、山东等…...

智能优化算法应用:基于蝠鲼觅食算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蝠鲼觅食算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蝠鲼觅食算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蝠鲼觅食算法4.实验参数设定5.算法结果6.…...

vue2 以及 vue3 自定义组件使用 v-model使用默认值以及自定义事件

vue2 以及 vue3 自定义组件使用 v-model使用默认值以及自定义事件 1. vue2 自定义组件的 v-model vue2官网&#xff0c;自定义组件官方解释&#xff1a;一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件上代码代码中使用了 element-ui 子组件 使用默…...

《PCL多线程加速处理》-滤波-统计滤波

《PCL多线程加速处理》-滤波-统计滤波 一、效果展示二、实现方式三、代码一、效果展示 提升速度随着点云越多效果越明显 二、实现方式 1、原始的统计滤波实现方式 #include <pcl/filters/statistical_outlier_removal.h>pcl::PointCloud<pcl::PointXYZ...

插入排序——直接插入排序和希尔排序(C语言实现)

文章目录 前言直接插入排序基本思想特性总结代码实现 希尔排序算法思想特性总结代码实现 前言 本博客插入排序动图和希尔排序视频参考大佬java技术爱好者&#xff0c;如有侵权&#xff0c;请联系删除。 直接插入排序 基本思想 直接插入排序是一种简单的插入排序法&#xff…...

【Linux系统化学习】进程地址空间 | 虚拟地址和物理地址的关系

个人主页点击直达&#xff1a;小白不是程序媛 Linux专栏&#xff1a;Linux系统化学习 代码仓库&#xff1a;Gitee 目录 虚拟地址和物理地址 页表 进程地址空间 进程地址空间存在的意义 虚拟地址和物理地址 我们在学习C/C的时候肯定都见过下面这张有关于内存分布的图片&a…...

Navicat 技术指引 | 适用于 GaussDB 分布式的模型功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…...

四十五、Redis主从

目录 1、数据同步原理 &#xff08;1&#xff09;全量同步 &#xff08;2&#xff09;增量同步 &#xff08;3&#xff09;优化Redis主从集群 &#xff08;4&#xff09;什么时候执行全量同步 &#xff08;5&#xff09;什么时候执行增量同步 2、流程 1、数据同步原理 &…...

Spring源码学习一

IOC容器概述 ApplicationContext接口相当于负责bean的初始化、配置和组装的IoC容器. Spring为ApplicationContext提供了一些开箱即用的实现, 独立的应用可以使用 ClassPathXmlApplicationContext或者FileSystemXmlApplicationContext&#xff0c;web应用在web.xml配置监 听&am…...

小红书种草和抖音传播区别是什么?

目前品牌较为关注的2大平台小红书和抖音&#xff0c;两者在种草方面存在一些明显的区别。本次就存量竞争、种草形式和种草策略这三个方面入手进行分析&#xff0c;今天和大家分享下小红书种草和抖音传播区别是什么&#xff1f; 一、存量竞争下的2大平台 2个都是属于存量竞争下的…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...