SpringBoot之核心配置
学习目标:
1.熟悉Spring Boot全局配置文件的使用
2.掌握Spring Boot配置文件属性值注入
3.熟悉Spring Boot自定义配置
4.掌握Profile多环境配置
5.了解随机值设置以及参数间引用
1.全局配置文件
Spring Boot使用 application.properties 或者application.yaml 的文件作为全局配置文件,该文件一般会选择 放在resources目录下
Spring Boot配置文件的命名以其格式分为两大类:
application.properites:以键值对的形式存在的文件,其要求严格,key=value,注意 value 后面不要留空格。
application.yaml或application.yml:yaml文件也是yml文件,yml文件层次感很强,利用缩进表示层级关系,同样也是键值对的形式:key: value ,最终形成树形结构。
1.1.properties配置文件
使用Spring Initalizr方式构建Spring Boot项目式,会在resources目录下自动生成一个空的application.properties文件,Spring Boot项目启动时会自动加载application.properties文件。
可以定义Spring Boot项目的相关属性
# 1、服务器(Server)
# 服务器IP绑定地址,如果主机有多个网卡,可以绑定一个IP地址
server.address=localhost
# Spring Boot应用监听端口
server.port=8080
# Spring Boot应用的上下文
server.servlet.context-path=/spboot01
# 会话过期时间,如果未指定持续时间后缀,则以秒为单位
server.servlet.session.timeout=30
1.2.yaml或yml配置文件
application.yaml配置文件的工作原理和application.properties是一样的,只不过yaml格式配置文件=看起来更简洁一些。
YAML文件的扩展名可以使用 .yaml 或者 .yml 。
application.yml文件使用"key:(空格) value"格式配置属性,使用缩进控制层级关系
1.2.1.value值为普通数据类型:
person:id: 1name: 张三isboy: true
1.2.2.value值为数组和单列集合:
当YAML配置文件中配置的属性值为数组或单列集合类型时,主要有两种书写方式:缩进式写法和行内式写法。
(1)缩进式写法
通过“-(空格)属性值”的形式为属性赋值
person:
hobby:
- play
- read
- sleep
通过直接赋值并使用英文逗号,分隔属性值。
person:
hobby:
play,
read,
sleep
(2)行内式写法
在YAML 配置文件中,还可以将上述缩进式写法简化为行内式写法。
person:
hobby: [play,read,sleep]
使用行内式写法设置属性值时,中括号"[]"是可以省略的,程序会自动匹配校对属性的值。
person:
hobby: play,read,sleep
1.2.3.value值为Map集合和对象 :
当YAML配置文件中配置的属性值为Map集合或对象类型时,YAML配置文件格式同样可以分为两种书写方式:缩进式写法和行内式写法。
(1)缩进式写法:
按照YAML文件格式编写属性的赋值。
person:
map:
k1: value1
k2: value2
(2)行内式写法:
属性值要用大括号"{ }" 包含。
person:
map: {k1: value1,k2: value2}
2.配置文件属性值注入
2.1.@ConfiggurationProperties注入属性
首先创建两个实体类 Pet 和 Person
public class Pet {private String name;private String type;// 并给上 Getter and Setter、toString()
}
@Component
@ConfigurationProperties(prefix="person")
public class Person {private Integer id;private String name;private Boolean isboy;private List<Object> hobby;private Map<String,Object> map;private Pet pet;}
@ConfigurationProperties(prefix="person"):注解的作用是将配置文件中以 person 开头的属性值通过setter方法注入实体类对应属性中
然后在 application.yml 配置文件中编写需要对 Person 类设置的配置属性。
person:id: 1name: 张三isboy: truehobby:play,read,sleepmap:k1: value1k2: value2pet:name: amytype: cat
最后,在测试类中引入 Person 实体类 Bean,并进行输出测试。
@Autowiredpublic Person person;@Testpublic void demo(){System.out.println(person);}

2.2.@Value注入属性
@Value注解是 Spring 框架提供的,用来读取配置文件中的属性值并逐个注入 Bean 对象的对应属性中
在 application.yml 配置文件中添加属性值初始化的配置。
student:sid: 1sname: 李四hobby: play,read,writefamily: father,mothermaps:k1: value1k2: value2pet:type: catname: jerry
然后创建Student实体类,并使用@Value的方式实现属性注入
@Component
public class Student {@Value("${student.sid}")private Integer sid;@Value("${student.sname}")private String sname;@Value("${student.hobby}")private List<Object> hobby;@Value("${student.family}")private String[] family;private Map<String,Object> maps;private Pet pet;//Getter、Setter、toString//不用Getter、Setter方法
}
最后,在测试类中引入Student实体类Bean,并进行输出测试。
@Autowiredpublic Student student;@Testpublic void demo(){System.out.println(student);}

有看到@Value注解方式跟@ConfigurationProperties有不同

3.Spring Boot自定义配置
几乎所有的配置都可以写在全局配置文件中,Spring Boot 会自动加载全局配置文件从而免除我们手动加载的烦恼。但是,如果我们自定义配置文件,Spring Boot 是无法识别这些配置文件的,此时就需要我们手动加载。
3.1.使用@PropertySource加载配置文件
在resource目录下新建一个SmsSender.properties自定义配置文件,在该配置文件中编写需要设置的配置属性
sms-sender.defaultConnectTimeout=10000
sms-sender.defaultReadTimeout=10000
sms-sender.product=Dysmsapi
sms-sender.domain=dysmsapi.aliyuncs.com
sms-sender.regionId=cn-changsha
sms-sender.endPointName=cn-changshasms-sender.access-key-id=LDSIEEK2hh34P8Hx
sms-sender.access-key-secret=ntUXt8MMYl7345619JrvJNDNTwslrg
## (一般有多个键值对,此处用基本值示例)
sms-sender.sign-name-json=zking
sms-sender.template-code=SMS_147419388
## (一般有多个键值对,此处用基本值示例)
sms-sender.template-param-json=www.zking.com## 选填的属性
sms-sender.sms-up-extend-code=888
sms-sender.out-id=
在com.zking.spboot01.config包下创建一个配置类SmsSenderConfiguration
/*** 阿里云短信发送器配置类*/
// 自定义配置类
@Configuration
// 开启对应配置类的属性注入功能
@EnableConfigurationProperties(SmsSenderConfiguration.class)
// 指定自定义配置文件位置和名称
@PropertySource("classpath:SmsSender.properties")
// 指定配置文件注入属性前缀
@ConfigurationProperties(prefix = "sms-sender")
@Data
public class SmsSenderConfiguration {/*** 选填。连接主机的超时时间(单位:毫秒) 。*/private String defaultConnectTimeout;/*** 选填。从主机读取数据的超时时间(单位:毫秒) 。*/private String defaultReadTimeout;/*** 固定值。短信API产品名称(短信产品名固定,无需修改)。*/private String product;/*** 固定值。短信API产品域名(接口地址固定,无需修改)。*/private String domain;/*** 固定值。服务器区域ID,暂时不支持多region(请勿修改)。*/private String regionId;/*** 固定值。服务器端点名称(请勿修改)。*/private String endPointName;/*** 必填。开发者accessKeyId。*/private String accessKeyId;/*** 必填。开发者accessKeySecret。*/private String accessKeySecret;/*** 必填。短信签名。*/private String signNameJson;/*** 必填。短信模板ID,发送国际/港澳台消息时,请使用国际/港澳台短信模版。*/private String templateCode;/*** 选填。短信模板变量替换JSON串.* 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议。如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 "{\"name\":\"Tom\", \"code\":\"123456\"}" 。* 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败。*/private String templateParamJson;/*** 选填。上行短信扩展码,扩展码字段控制在7位或以下,无特殊需要此字段的用户请忽略此字段。*/private String smsUpExtendCode;/*** 选填。外部流水扩展字段。outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者。*/private String outId;
}
最后,在测试类中引入SmsSenderConfiguration类型的Bean,并进行输出测试。
@Autowiredpublic SmsSenderConfiguration smsSenderConfiguration;@Testpublic void demo(){System.out.println(smsSenderConfiguration);}

3.2.使用@ImportResource加载XML配置文件
@lmportResource注解标注在一个配置类上, 通常放置在应用启动类上,使用时需要指定 XML 配置文件的路径和名称。
在 com.zking.spboot01.config 包下创建 SmsSenderConfiguration类。该类目前没有添加任何配置和注解,因此还无法正常被Spring Boot扫描识别。
@Data
public class SmsSenderConfiguration {/*** 选填。连接主机的超时时间(单位:毫秒) 。*/private String defaultConnectTimeout;/*** 选填。从主机读取数据的超时时间(单位:毫秒) 。*/private String defaultReadTimeout;/*** 固定值。短信API产品名称(短信产品名固定,无需修改)。*/private String product;/*** 固定值。短信API产品域名(接口地址固定,无需修改)。*/private String domain;/*** 固定值。服务器区域ID,暂时不支持多region(请勿修改)。*/private String regionId;/*** 固定值。服务器端点名称(请勿修改)。*/private String endPointName;/*** 必填。开发者accessKeyId。*/private String accessKeyId;/*** 必填。开发者accessKeySecret。*/private String accessKeySecret;/*** 必填。短信签名。*/private String signNameJson;/*** 必填。短信模板ID,发送国际/港澳台消息时,请使用国际/港澳台短信模版。*/private String templateCode;/*** 选填。短信模板变量替换JSON串.* 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议。如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 "{\"name\":\"Tom\", \"code\":\"123456\"}" 。* 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败。*/private String templateParamJson;/*** 选填。上行短信扩展码,扩展码字段控制在7位或以下,无特殊需要此字段的用户请忽略此字段。*/private String smsUpExtendCode;/*** 选填。外部流水扩展字段。outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者。*/private String outId;
}
在resources目录下新建applicationContext.xml自定义配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="smsSenderConfiguration" class="com.zking.spboot01.config.SmsSenderConfiguration"><property name="defaultConnectTimeout" value="10000" /><property name="defaultReadTimeout" value="10000" /><property name="product" value="Dysmsapi" /><property name="domain" value="dysmsapi.aliyuncs.com" /><property name="regionId" value="cn-changsha" /><property name="endPointName" value="cn-changsha" /><property name="accessKeyId" value="LDSIEEK2hh34P8Hx" /><property name="accessKeySecret" value="ntUXt8MMYl7345619JrvJNDNTwslrg" /><property name="signNameJson" value="zking" /><property name="templateCode" value="SMS_147419388" /><property name="templateParamJson" value="www.zking.com" /><property name="smsUpExtendCode" value="888" /><property name="outId" value="" /></bean>
</beans>
由于Spring Boot 默认是无法识别XML 配置文件的,为了保证XML配置文件生效,需要在项目启动类Spboot02Application上添加@ImportResource注解来指定XML文件位置。
@SpringBootApplication
@ImportResource("classpath:applicationContext.xml")
public class Spboot01Application {public static void main(String[] args) {SpringApplication.run(Spboot01Application.class, args);}
}
最后,在测试类中引入 SmsSenderConfiguration 类型的 Bean,并进行输出测试。
@Autowiredpublic SmsSenderConfiguration smsSenderConfiguration;@Testpublic void demo(){System.out.println(smsSenderConfiguration);}

4.Profile多环境配置
4.1.Profile文件方式
application-dev.yml # 开发环境配置文件
application-test.yml # 测试环境配置文件
application-prod.yml # 生产环境配置文件
application.yml # 全局配置文件

在 resources 目录下的全局配置文件 application.yml 中配置 spring.profiles.active 属性选择性激活 Profile文件设置。
spring:profiles:active: prod # 激活生产环境配置文件
在application-dev.yml下,每个下面都加上对应的
application:name: spboot-dev
在application-prop.yml下,
application:name: spboot-prod
在application-text.yml下,
application:name: spboot-test
启动Spring Boot 项目并查看控制台输出效果。

4.2.@Profile注解方式
在 com.zking.spboot01.config 包下创建一个用于配置数据库的接口文件 IDBConnector 。
public interface IDBConnector {String confiure();
}
在 com.zking.spboot01.config 包下创建实现了 IDBConnector 接口的 DBConnectorDev类并重写 configure()方法,模拟连接配置不同的数据库环境。
@Configuration
@Profile("dev")
public class DBConnectorDev implements IDBConnector{@Overridepublic String confiure() {String msg="DEV";System.out.println(msg);return msg;}
}
最后运行
@Autowiredpublic IDBConnector dbConnectorDev;@Testpublic void demo(){System.out.println(dbConnectorDev.confiure());}

5.参数间引用
在 Spring Boot 的全局配置文件application.yml中
person:id: 1name: 张三isboy: truehobby:play,read,sleepmap:k1: value1k2: value2pet:name: amytype: cat
student:sid: 1sname: ${person.name}hobby: play,read,writefamily: father,mothermaps:k1: value1k2: value2pet:type: catname: jerry
Student中的sname引用的是person中的name,我们运行一下看Student中的sname是不是person的name
@Autowiredpublic Student student;@Testpublic void demo(){System.out.println(student);}

这是最基本的引用方式了
本期就到这里结束了,再见ヾ(≧▽≦*)o
相关文章:
SpringBoot之核心配置
学习目标: 1.熟悉Spring Boot全局配置文件的使用 2.掌握Spring Boot配置文件属性值注入 3.熟悉Spring Boot自定义配置 4.掌握Profile多环境配置 5.了解随机值设置以及参数间引用 1.全局配置文件 Spring Boot使用 application.properties 或者application.yaml 的文…...
EasyExcel上传校验文件错误信息放到文件里以Base64 返回给前端
产品需求: 前端上传个csv 或 excel 文件,文件共4列,验证文件大小,类型,文件名长度,文件内容,如果某行某个单元格数据验证不通过,就把错误信息放到这行第五列,然后把带有…...
单片机软件定时器V4.0
单片机软件定时器V4.0 用于单片机定时执行任务等,比如LED GPIO等定时控制,内置前后台工作模式 头文件有使用例子 #ifndef __SORFTIME_APP_H #define __SORFTIME_APP_H#ifdef __cplusplus extern "C" { #endif#include <stdint.h>// #…...
超完整Docker学习记录,Docker常用命令详解
前言 关于国内拉取不到docker镜像的问题,可以利用Github Action将需要的镜像转存到阿里云私有仓库,然后再通过阿里云私有仓库去拉取就可以了。 参考项目地址:使用Github Action将国外的Docker镜像转存到阿里云私有仓库 一、Docker简介 Do…...
C++ 入门第26天:文件与流操作基础
往期回顾: C 入门第23天:Lambda 表达式与标准库算法入门-CSDN博客 C 入门第24天:C11 多线程基础-CSDN博客 C 入门第25天:线程池(Thread Pool)基础-CSDN博客 C 入门第26天:文件与流操作基础 前言…...
使用python将多个Excel表合并成一个表
import pandas as pd# 定义要合并的Excel文件路径和名称 file_paths [file1.xlsx, file2.xlsx, file3.xlsx, file4.xlsx, file5.xlsx]# 创建一个空的DataFrame来存储合并后的数据 merged_data pd.DataFrame()# 循环遍历每个Excel文件,并读取其中的数据 for file_p…...
halcon三维点云数据处理(七)find_shape_model_3d_recompute_score
目录 一、find_shape_model_3d_recompute_score例程代码二、set_object_model_3d_attrib_mod函数三、prepare_object_model_3d 函数四、create_cube_shape_model_3d函数五、获得CamPose六、project_cube_image函数七、find_shape_model_3d函数八、project_shape_model_3d函数 一…...
vue js实现时钟以及刻度效果
2025.01.08今天我学习如何用js实现时钟样式,效果如下: 一、html代码如下: <template><!--圆圈--><div class"notice_border"><div class"notice_position notice_name_class" v-for"item in …...
unity学习15:预制体prefab
目录 1 创建多个gameobject 2 创建prefab 2.1 创建prefab (类) 2.2 prefab 是一个文件 2.3 prefab可以导出 3 创建prefab variant (子类) 3.1 除了创建多个独立的prefab, 还可以创建 prefab variant 3.2 他…...
基于Thinkphp6+uniapp的陪玩陪聊软件开发方案分析
使用uni-app框架进行前端开发。uni-app是一个使用Vue.js开发所有前端应用的框架,支持一次编写,多端发布,包括APP、小程序、H5等。 使用Thinkphp6框架进行后端开发。Thinkphp6是一个轻量级、高性能、面向对象的PHP开发框架,具有易…...
MySQL - 子查询和相关子查询详解
在SQL中,子查询(Subquery)和相关子查询(Correlated Subquery)是非常强大且灵活的工具,可以用于执行复杂的数据检索和操作。它们允许我们在一个查询中嵌套另一个查询,从而实现更复杂的逻辑和条件…...
Android 系统签名 keytool-importkeypair
要在 Android 项目中使用系统签名并将 APK 打包时与项目一起打包,可以按照以下步骤操作: 步骤 1:准备系统签名文件 从 Android 系统源码中获取系统签名文件,通常位于 build/target/product/security 目录下,包括 pla…...
安卓漏洞学习(十八):Android加固基本原理
APP加固技术发展历程 APK加固整体思路 加固整体思路:先解压apk文件,取出dex文件,对dex文件进行加密,然后组合壳中的dex文件(Android类加载机制),结合之前的apk资源(解压apk除dex以外…...
Docker 使用Dockerfile创建镜像
创建并且生成镜像 在当前目录下创建一个名为Dockerfile文件 vi Dockerfile填入下面配置 # 使用 CentOS 作为基础镜像 FROM centos:7# 设置工作目录 WORKDIR /app# 复制项目文件到容器中 COPY bin/ /app/bin/ COPY config/ /app/config/ COPY lib/ /app/lib/ COPY plugin/ /a…...
【Python运维】利用Python实现高效的持续集成与部署(CI/CD)流程
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 持续集成与部署(CI/CD)是现代软件开发中不可或缺的实践,通过自动化测试、构建和部署流程,显著提高了开发效率与运维质量。本文详细介绍…...
成功!QT 5.15.2编译mysql驱动
首选要说明,5.15与6.7编译驱动是完全不同的。搞错了永远编译不出来。 参考 主要是参考安装QT,安装mysql等。 编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动(MSVC版)_mingw编译qt6.7-CSDN博客 复制mysql的include和lib到一个方便的目…...
安卓NDK视觉开发——手机拍照文档边缘检测实现方法与库封装
一、项目创建 创建NDK项目有两种方式,一种从新创建整个项目,一个在创建好的项目添加NDK接口。 1.创建NDK项目 创建 一个Native C项目: 选择包名、API版本与算法交互的语言: 选择C版本: 创建完之后,可…...
第二届 Sui 游戏峰会将于 3 月 18 日在旧金山举行
3 月中旬,Sui 基金会和 Mysten Labs 将共同举办第二届 Sui 游戏峰会(Sui Gaming Summit),这是一个专注于 Sui 游戏平台的 GDC 周边活动。此次峰会将与旧金山的年度游戏开发者大会(GDC,Game Developers Conf…...
自动驾驶相关知识学习笔记
一、概要 因为想知道SIL、HIL是什么仿真工具,故而浏览了自动驾驶相关的知识。 资料来源《自动驾驶——人工智能理论与实践》胡波 林青 陈强 著;出版时间:2023年3月 二、图像的分类、分割与检测任务区别 如图所示,这些更高阶的…...
uniapp - 基于uniapp+vue3实现自定义增强版table表格组件体验「兼容H5+小程序+App端」
本文提供增强版table表格组件体验,打造跨端表格的新标杆. uv3-table:一款基于uniappvue3跨端自定义手机端增强版表格组件。支持固定表头/列、边框、斑马纹、单选/多选,自定义表头/表体插槽、左右固定列阴影高亮显示。支持编译兼容H5小程序端App端。 提供…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
