SpringBoot 中配置处理

news2024/10/7 4:29:17
  1、简介

        本文介绍一些 springboot 配置管理相关的内容,如何自定义配置,导入配置,配置绑定和基于 profiles 的配置。

2、springboot 配置管理
2.1、自定义配置类

        在 spring 中使用 @Configuration 注解定义配置类,在 springboot 中使用 @SpringBootConfiguration 注解替换了 @Configuration 注解。示例如下:

//@Configuration
@SpringBootConfiguration
public class ConfigurationTest {   
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
2.2、导入配置类

        导入配置类通过 @Import 注解导入,如果配置类都在类扫描路径下,就不用通过 @Import 注解导入了,如果不在默认类扫描的包下,可以使用 @ComponentScan 注解指定要扫描的包路径。

2.3、配置文件
2.3.1、配置文件格式

1)、properties 类型的配置文件格式采用 key=value 形式。

2)、yml / yaml 类型的文件采用 key: value 树状格式。yml 文件格式有以下两个说明:

        a、键(key)冒号后面需要添加一个空格;

        b、每个层级的缩进用两个空格。

2.3.2、配置绑定

1)、properties 类型可以使用 @PropertySource 和 @Value 注解进行配置绑定。

2)、yml 类型的配置文件不支持使用 @PropertySource 注解进行配置绑定,支持 @ConfigurationProperties 注解进行属性配置。

注意:

1)、@ConfigurationProperties 注解绑定参数,需要用到类的 setter 方法然后在启动类上添加 @EnableConfigurationProperties({**Properties.class}) 注解;

2)、@ConfigurationProperties 可以放在类或者方法上(在方法上与@Bean联合使用,此时就不用再在启动类上添加 @EnableConfigurationProperties 注解),在方法上就是给返回的 bean 对象进行参数绑定;

3)、@ConfigurationProperties 注解绑定参数支持使用默认值,如果配置文件中未指定,则使用默认值。

// properties 文件的配置
@Data
@PropertySource("config/db.properties")
public class TestProperties {
    @Value("${db.name}")
    private String name;
}
// yml 文件配置
@Data
@ConfigurationProperties(prefix = "test.param")
public class TestProperties {
    private String name;
    private Integer age;
}
 // 启动类上添加@EnableConfigurationProperties 将配置类导入容器
@SpringBootApplication
@Slf4j
@EnableConfigurationProperties({TestProperties.class})
public class AutoConfigurationTestApplication {
    public static void main(String[] args) {
        SpringApplication.run(AutoConfigurationTestApplication.class, args);
    }
}
2.3.4、配置参数类扫描

          @ConfigurationProperties 注解需要与 @EnableConfigurationProperties 注解结合使用,这种方式有些繁杂,可以在启动类上使用 @ConfigurationPropertiesScan 注解,就可以扫描所指定的包下的参数类,在 basePackages 参数中指定具体的包即可。

@SpringBootApplication
@Slf4j
@ConfigurationPropertiesScan(basePackages = {})
public class AutoConfigurationTestApplication {
    public static void main(String[] args) {
        SpringApplication.run(AutoConfigurationTestApplication.class, args);
    }
}
2.3.5、配置验证

        在进行参数绑定的时候,可以进行参数验证,保证绑定参数正常。引入以下依赖:

<dependency>
   <groupId>org.hibernate.validator</groupId>
   <artifactId>hibernate-validator</artifactId>
</dependency>

        在绑定参数的实体类上可以使用对应的校验注解,例如 @NotNull .....。

2.3.6、多个配置文件的优先级

        在 springboot 中使用的配置文件默认名称为:application.properties / application.yml

1)、项目直接启动:

配置文件位置优先级
项目根目录config文件夹下找配置文件(根目录是指和src目录同级)1
项目根目录下找配置文件(根目录是指和src目录同级)2
resources目录下找cofnig文件夹下找配置文件3
resources目录下找配置文件4

注意:

a、若同一个目录下有 .properties 文件和 yml 文件,会优先使用 .properties 文件。

b、springboot 会按照四个位置全部加载配置文件,如果高优先级的配置文件属性和低优先级的配置文件属性冲突,会使用优先级高的(使用第一次读到的),如果不冲突,则会共存互补。

2)、使用外部配置文件启动(使用 jar 包启动项目)

        springboot 打包时不会把项目根目录下的 ./config 和 ./ 这两级目录打包进去。这个设计很巧妙,因为没有打包进来,所以SpringBoot可以加载外部发配置文件
        springboot 支持把配置文件放在外部。只要把配置文件放在 jar 包的同级目录下,或者放在同级下的config文件夹中,springboot 都会去此处读取配置文件。

        命令行启动中,通过 --spring.config.location 参数指定配置文件的方式优先级最高,如果使用指定参数的形式(例如:--server.port),则使用此参数值。

注意:以上通过加载外部配置文件后,还会把 jar 包的 resources 目录下的配置也加载进来,相同属性使用优先级最高的。

2.3.7、使用指定的 profile 配置文件

        在上节中,四个位置指定的配置文件,可以在配置文件中指定生效的 profile,相应的配置文件命名方式为:application-${profile}.properties/yml。指定使用的 profile 使用配置:spring.profiles.active=*。

        在加载配置文件的时候,先加载不带 profile 的主配置文件,再加载带 profile 的配置文件,在主配置文件中使用 spring.profiles.active=*,指定使用哪个 profile 文件。

指定使用哪个 profile 的文件有以下几种方式:

        1)、在主配置文件中指定,使用 spring.profiles.active=*。

        2)、在命令行参数中指定:--spring.profiles.active=test。

        3)、虚拟机参数中指定:-Dspring.profiles.active=test。

2.3.8、单配置文件配置多个 profile

        yml 文件中使用 --- 符号分隔,properties 文件使用 #--- 符号分隔。需要注意以下几点:

        1)、多个 profile 之间的分隔符不能有空格,并且分隔符要连续。

        2)、分隔符前、后一行不能是注释行。

        3)、单配置文件配置多个 profile,不能被 @PropertySource 等注解加载。

以 yml 文件为例:

spring:
  profiles:
    active: prod  #指定需要切换的环境,文件优先
---
spring:
  profiles: dev  #指定属于哪个环境
---
spring:
  profiles: prod  #指定属于哪个环境
2.3.9、指定 profile 加载对象

        profile 不仅可以激活配置类,还可以激活 java 对象,使用 @Profile 注解。

注意:

1)、在使用 @Component 和 @Configuration 注解时,可以直接把 @Profile 注解放到类上;

2)、用在 @ConfigurationProperties 注解上,如果使用包扫描的方式加载配置类可以直接使用 @Profile 注解;如果使用的是 @EnableConfigurationProperties, 需要将 @Profile 注解用在 @EnableConfigurationProperties 注解上。

3、总结

        本文详细介绍 springboot 加载配置,绑定配置,指定 profile 配置等功能,掌握 springboot 的配置使用,对于深入了解自动配置原理有着巨大帮助。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1405659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用GPU加速自定义风格图像生成-利用GPU加速结合了ControlNet/ Lora的Stable Diffusion XL

点击链接完成注册&#xff0c;参加本次在线研讨会 https://www.nvidia.cn/webinars/sessions/?session_id240124-31319 随着AI技术的发展, 数字内容创建业务也变得越来越火热。生成式AI模型的发布, 让我们看到了人工智能在各行各业的潜力。您只需要用语言简单描述自己希望看…

【Python】FastApi框架搭建部署

FastApi 是一个现代、快速&#xff08;高性能&#xff09;的 web 框架&#xff0c;用于基于标准Python构建的API。 官方网址&#xff1a;FastAPI 1.安装 1.1 环境信息 # Python版本 3.8.0 1.2 安装 FastApi pip install fastapi # uvicorn 作为服务启动fastapi框架 pip i…

【牛客】几何糕手、国际裁判带师、数位dp?、灵异背包、矩阵快速幂签到、第一次放学

文章目录 《几何糕手》题目描述思路代码 《国际裁判带师》题目描述思路代码 《数位dp?》题目描述思路代码 《灵异背包》题目描述思路代码 《矩阵快速幂签到》题目描述思路代码 《第一次放学》题目描述思路代码 《几何糕手》 题目链接 题目描述 “芝士肾么&#xff1f;” 地…

Mysql的骚操作说明

Mysql的常规操作 记录些不常用,但是很实用的操作,旨在在MySQL语言能解决的批量操作的问题,不动用其他动态或静态语言的辅助。 1、FROM_UNIXTIME 时间戳转时间格式 select scode,sid,gender,type,FROM_UNIXTIME(report_time) as report_time,FROM_UNIXTIME(add_time) as add…

基于SpringBoot的教务管理系统设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的教务管…

finalshell连接linux的kali系统

kali的ssh服务似乎是默认关闭的&#xff0c;笔者在玩CentOS系统时可以直接用finalshell完成连接&#xff0c;但kali不行&#xff0c;需要先手动开启ssh服务。 开启kali的ssh服务 输入【ssh start】命令开启ssh服务&#xff0c;可以用【ssh status】命令查看ssh状态&#xff0c…

【Linux】vim 操作指令详解

Linux 1 what is vim &#xff1f;2 vim基本概念3 vim的基本操作 &#xff01;3.1 vim的快捷方式3.1.1 复制与粘贴3.1.2 撤销与剪切3.1.3 字符操作 3.2 vim的光标操作3.3 vim的文件操作 总结Thanks♪(&#xff65;ω&#xff65;)&#xff89;感谢阅读下一篇文章见&#xff01;…

API协议设计的十种技术

文章目录 前言一、REST二、GraphQL三、gRPC&#xff08;google Remote Procedure Calls&#xff09;四、Webhooks五、服务端的事件发送——SSE&#xff08;Server-sent Events&#xff09;六、EDI&#xff08;Electronic Data Interchange&#xff09;七、面向API 的事件驱动设…

【.NET Core】深入理解异步编程模型(APM)

【.NET Core】深入理解异步编程模型&#xff08;APM&#xff09; 文章目录 【.NET Core】深入理解异步编程模型&#xff08;APM&#xff09;一、APM概述二、IAsyncResult接口2.1 BeginInvoke2.2 EndInvoke2.3 IAsyncResult属性2.4 IAsyncResult异步演示 三、通过结束异步操作来…

【Linux】yum本地配置

配置将来是在干什么&#xff1f; yum会根据/etc/yum.repos.d/该路径下面的配置文件&#xff0c;来构成自己的下载路径&#xff0c;&#xff08;根据OS版本&#xff0c;根据你要下载的软件&#xff09;&#xff0c;yum帮助我们下载&#xff0c;安装 一般的机器&#xff0c;内置…

Operation

contents 服务器一、相关概念1.1 云服务器与实例1.2 关于域名解析延时与80端口1.3 关于备案1.4 关于SSL证书1.5 关于SSL证书的签发1.6 关于SSL证书的部署1.7 关于LNMP和LAMP1.8 关于bt面板 二、单服务器单一级域名多网站2.1 创建多个二级域名2.2 解析二级域名绑定到服务器上2.3…

【QML COOK】- 011-动画插值设置

QML中内置了一些动画插值类型。不同的插值类型可以通过Animation的easing属性设置。具体可见&#xff1a;PropertyAnimation QML Type | Qt Quick 6.6.1 1. 创建工程在Main.qml&#xff0c;中编写如下代码 import QtQuickWindow {width: 1000height: 100visible: truetitle: …

数字人直播系统跟无人直播系统的区别是什么?如何选择呢?

有媒体预测&#xff0c;未来几年&#xff0c;数字人工智能将呈现爆发式的增长&#xff0c;数字人系统将广泛应用于各个行业&#xff0c;比如数字人直播&#xff0c;数字人短视频播报&#xff0c;数字人制作的海报宣传等等&#xff0c;当然&#xff0c;这其中应用最广的当属数字…

Python实现离散选择Logit模型(Logit算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 Logit模型&#xff08;Logit model&#xff0c;也译作“评定模型”&#xff0c;“分类评定模型”&…

从想象到现实:Midjourney的AI图像生成之旅

从想象到现实&#xff1a;Midjourney的AI图像生成之旅 继ChatGPT之后&#xff0c;Midjourney作为AI艺术的璀璨明珠&#xff0c;吸引了全球范围内的广泛关注。这款工具通过先进的AI技术&#xff0c;将用户输入的文字描述转化为精美绝伦的图像。无论是风景画、肖像画还是抽象艺术…

CentOS7的安装配置

一. CentOS7的安装【在虚拟机中】 首先创建一个虚拟机&#xff0c; 这个没什么好说的&#xff0c;基本上都是下一下一步安装。 注意它的存放位置最好不要放在C盘&#xff0c; 以及开始创建时选择”稍后安装操作系统“ 创建完成后再配置镜像文件 开启虚拟机&#xff0c;继续下…

【K8S】Kubernetes 中滚动发布由浅入深实战

目录 一、Kubernetes中滚动发布的需求背景1.1 滚动发布1.2 滚动发布、蓝绿发布、金丝雀发布的区别 二、Kubernetes中实现滚动发布2.1 定义Kubernetes中的版本2.2 创建 Deployment 资源对象2.2.1 在 Yaml 中定义 Deployment 资源对象2.2.2 执行命令创建 Deployment 资源对象 三、…

三、MySQL之创建和管理表

一、基础知识 1.1 一条数据存储的过程 存储数据是处理数据的第一步 。只有正确地把数据存储起来,我们才能进行有效的处理和分析。否则,只 能是一团乱麻,无从下手。 在 MySQL 中, 一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。 …

基于SpringBoot Vue航空机票预订系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

【Linux与windows的文件互相传输】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 关于 rzsz 注意事项 查看软件包 使用命令 下载到本地&#xff08;使用sz的命令&#xff09; 本地文件上传到Linux中&#xff08;使用rz命令&#xff09; 方法一…