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端。 提供…...

分类预测 | Matlab实现CNN-BiLSTM-Attention高光谱数据分类预测
分类预测 | Matlab实现CNN-BiLSTM-Attention高光谱数据分类预测 目录 分类预测 | Matlab实现CNN-BiLSTM-Attention高光谱数据分类预测分类效果功能概述程序设计参考资料 分类效果 功能概述 该MATLAB代码实现了一个结合CNN、BiLSTM和注意力机制的高光谱数据分类预测模型&#x…...

算法-多条件排序
1、数对排序的使用 pair<ll,ll> a[31];//cmp为比较规则 ll cmp(pair<ll,ll>a,pair<ll,ll>b){if(a.first!b.first)return a.first>b.first;else return a.second<b.second; }//按照比较规则进行排序 sort(a1,a31,cmp); 2、具体例题 输入样例࿱…...
phosphobot开源程序是控制您的 SO-100 和 SO-101 机器人并训练 VLA AI 机器人开源模型
一、软件介绍 文末提供程序和源码下载 phosphobot开源程序是控制您的 SO-100 和 SO-101 机器人并训练 VLA AI 机器人开源模型。 二、Overview 概述 🕹️ Control your robot with the keyboard, a leader arm, a Meta Quest headset or via API 🕹️…...

一个完整的日志收集方案:Elasticsearch + Logstash + Kibana+Filebeat (二)
📄 本地 Windows 部署 Logstash 连接本地 Elasticsearch 指南 ✅ 目标 在本地 Windows 上安装并运行 Logstash配置 Logstash 将数据发送至本地 Elasticsearch测试数据采集与 ES 存储流程 🧰 前提条件 软件版本要求安装说明Java17Oracle JDK 下载 或 O…...
Docker_Desktop开启k8s
Docker_Desktop开启k8s 原文地址:在 Docker Desktop 中启用 K8s 服务 - 墨墨墨墨小宇 - 博客园 开启k8s服务 打开docker的设置界面,选择Docker Engine,修改如下: {"debug": false,"experimental": false,…...

408第一季 - 数据结构 - 字符串和KMP算法
闲聊 这章属于难点但考频低 3个名词记一下:模式匹配,主串,字串(模式串) 举个例子 主串 aabaaaabaab 字串 aabaab 模式匹配 从主串找到字串 暴力解法 也是不多说 很暴力就是了 KMP算法 next数组 它只和字串有关 先…...
rec_pphgnetv2完整代码学习(二)
六、TheseusLayer PaddleOCRv5 中的 TheseusLayer 深度解析 TheseusLayer 是 PaddleOCRv5 中 rec_pphgnetv2 模型的核心网络抽象层,提供了强大的网络结构调整和特征提取能力。以下是对其代码的详细解读: 1. 整体设计思想 核心概念: 网络…...

win32相关(消息Hook)
消息Hook 要想实现消息Hook需要使用到三个相关的Api SetWindowsHookEx // 设置钩子CallNextHookEx // 将钩子信息传递到当前钩子链中的下一个子程序UnhookWindowsHookEx // 卸载钩子 我们编写的消息钩子需要将设置钩子的函数写到dll里面,当钩住一个线程后ÿ…...

论文解读:Locating and Editing Factual Associations in GPT(ROME)
论文发表于人工智能顶会NeurIPS(原文链接),研究了GPT(Generative Pre-trained Transformer)中事实关联的存储和回忆,发现这些关联与局部化、可直接编辑的计算相对应。因此: 1、开发了一种因果干预方法,用于识别对模型的事实预测起…...
极空间z4pro配置gitea mysql,内网穿透
极空间z4pro配置gitea mysql等记录,内网穿透 1、mysql、gitea镜像下载,极空间不成功,先用自己电脑科学后下载镜像,拉取代码: docker pull --platform linux/amd64 gitea/gitea:1.23 docker pull --platform linux/amd64 mysql:5.…...