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.ymlyaml文件也是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 

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

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

相关文章

后端服务集成ElasticSearch搜索功能技术方案

文章目录 一、为什么选用ElasticSearch二、ElasticSearch基本概念1、文档和字段2、索引和映射3、倒排索引、文档和词条4、分词器 三、ElasticSearch工作原理1、Term Dictionary、Term index2、Stored Fields3、Docs Values4、Segment5、Lucene6、高性能、高扩展性、高可用①高性…

举例说明AI模型怎么聚类,最后神经网络怎么保存

举例说明怎么聚类,最后神经网络怎么保存 目录 举例说明怎么聚类,最后神经网络怎么保存K - Means聚类算法实现神经元特征聚类划分成不同专家的原理和过程 特征提取: 首先,需要从神经元中提取有代表性的特征。例如,对于一个多层感知机(MLP)中的神经元,其权重向量可以作为特…

ocrmypdf使用时的cannot import name ‘PdfMatrix‘ from ‘pikepdf‘问题

最近在做pdf的ocr,之前使用过ocrmypdf&#xff0c;打算再次使用&#xff0c;发现它更新了&#xff0c;所以就打算使用最新版 环境&#xff1a;win11anaconda 创建虚拟环境后安装语句&#xff1a; pip install ocrmypdf -i https://pypi.tuna.tsinghua.edu.cn/simple pip in…

【JavaEE进阶】获取Cookie/Session

&#x1f340;Cookie简介 HTTP协议自身是属于 "⽆状态"协议. "⽆状态"的含义指的是: 默认情况下 HTTP 协议的客⼾端和服务器之间的这次通信,和下次通信之间没有直接的联系.但是实际开发中,我们很多时候是需要知道请求之间的关联关系的. 例如登陆⽹站成…

Oracle:ORA-00904: “10“: 标识符无效报错详解

1.报错Oracle语句如下 SELECT YK_CKGY.ID,YK_CKGY.DJH,YK_CKGY.BLRQ,YK_CKGY.ZBRQ,YK_CKGY.SHRQ,YK_CKGY.YT,YK_CKGY.ZDR,YK_CKGY.SHR,YK_CKGY.BZ,YK_CKGY.JZRQ,YK_CKGY.ZT,YK_CKGY.CKLX,(case YK_CKGY.CKLXwhen 09 then药房调借when 02 then科室退药when 03 then损耗出库when…

Linux 磁盘管理命令:使用xfs 管理命令

文章目录 Linux磁盘管理命令使用xfs 管理命令1.命令说明2&#xff0e;建立 XFS 文件系统4&#xff0e;调整 XFS 文件系统各项参数5&#xff0e;在线调整 XFS 文件系统的大小6&#xff0e;暂停和恢复 XFS 文件系统7&#xff0e;尝试修复受损的 XFS 文件系统8&#xff0e;备份和恢…

《Spring Framework实战》3:概览

欢迎观看《Spring Framework实战》视频教程 Spring Framework 为基于现代 Java 的企业应用程序提供了全面的编程和配置模型 - 在任何类型的部署平台上。 Spring 的一个关键要素是应用程序级别的基础设施支持&#xff1a;Spring 专注于企业应用程序的 “管道”&#xff0c;以便…

借助免费GIS工具箱轻松实现las点云格式到3dtiles格式的转换

在当今数字化浪潮下&#xff0c;地理信息系统&#xff08;GIS&#xff09;技术日新月异&#xff0c;广泛渗透到城市规划、地质勘探、文化遗产保护等诸多领域。而 GISBox 作为一款功能强大且易用的 GIS 工具箱&#xff0c;以轻量级、免费使用、操作便捷等诸多优势&#xff0c;为…

均值滤波从图像复原角度的解释

廖老师说若将图像生成看作一个随机过程&#xff0c;均值滤波&#xff08;Mean Filtering&#xff09;可以视为在高斯噪声模型下的线性最小均方估计&#xff08;Linear Minimum Mean Squared Error, LMMSE&#xff09;或者极大似然估计&#xff08;Maximum Likelihood Estimatio…

高等数学学习笔记 ☞ 一元函数微分的基础知识

1. 微分的定义 &#xff08;1&#xff09;定义&#xff1a;设函数在点的某领域内有定义&#xff0c;取附近的点&#xff0c;对应的函数值分别为和&#xff0c; 令&#xff0c;若可以表示成&#xff0c;则称函数在点是可微的。 【 若函数在点是可微的&#xff0c;则可以表达为】…

linux之自动挂载

如果想要实现自动挂载&#xff0c;应该挂在客户端&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 客户端&#xff1a; [rootlocalhost ~]# yum install nfs-utils -y &#xff08;下载软件&#xff09; [rootlocalhost ~]# systemctl start nfs-utils.servic…

用户界面软件01

Jens Coldewey 著&#xff0c;Tom.X 译 本文中的模式语言逐步深入地探讨用户界面架构的设计&#xff0c;它基于人机工程学&#xff0c;足以形成一套完整的体系。如果你对这方面有兴趣&#xff0c;请参考[Tog92]&#xff0c;[Coo95]和[Col95]。 本文不讨论用户界面的布局&…

Spring整合SpringMVC

目录 【pom.xml】文件&#xff1b; 新建【applicationContext.xml】文件 新建【springmvc.xml】文件&#xff1b; 配置【src/main/webapp/WEB-INF/web.xml】文件&#xff1b; 新建【com.gupaoedu.service.IUserService】&#xff1b; 新建【com.gupaoedu.service.impl.Use…

【数据结构-堆】2233. K 次增加后的最大乘积

给你一个非负整数数组 nums 和一个整数 k 。每次操作&#xff0c;你可以选择 nums 中 任一 元素并将它 增加 1 。 请你返回 至多 k 次操作后&#xff0c;能得到的 nums的 最大乘积 。由于答案可能很大&#xff0c;请你将答案对 109 7 取余后返回。 示例 1&#xff1a; 输入&…

2025.1.8(c++对c语言的扩充——堆区空间,引用,函数)

笔记 上一笔记接续&#xff08;练习2的答案&#xff09; 练习&#xff1a;要求在堆区连续申请5个int的大小空间用于存储5名学生的成绩&#xff0c;分别完成空间的申请、成绩的录入、升序排序、成绩输出函数以及空间释放函数&#xff0c;并在主程序中完成测试 要求使用new和d…

(长期更新)《零基础入门 ArcGIS(ArcScene) 》实验七----城市三维建模与分析(超超超详细!!!)

城市三维建模与分析 三维城市模型已经成为一种非常普遍的地理空间数据资源,成为城市的必需品,对城市能化管理至关重要。语义信息丰富的三维城市模型可以有效实现不同领域数据与IS相信息的高层次集成及互操作,从而在城市规划、环境模拟、应急响应和辅助决策等众多领域公挥作用、…

在离线环境中安装 `.rpm` 包的步骤

在一些环境中&#xff0c;可能无法直接通过网络安装软件包。特别是在没有互联网连接的情况下&#xff0c;我们仍然可以手动下载 .rpm 安装包并进行离线安装。本文将介绍如何在离线环境中安装多个 .rpm 包&#xff0c;确保软件的顺利安装和依赖关系的处理。 1. 将 .rpm 文件复制…

【人工智能开题报告】

人工智能开题报告 第一步 12 篇文献 应用&#xff08;研究&#xff09;领域历史、现状、发展趋势以及对社会、环境、健康、安全等方面的影响分析第二步 15篇 应用&#xff08;研究&#xff09;领域中的 工作成果简述2.1 国外 6篇2.2 国内 9篇 第三步 9/10篇 研究方案 的分析与选…

Harmony开发【笔记1】报错解决(字段名写错了。。)

在利用axios从网络接收请求时&#xff0c;发现返回obj的code为“-1”&#xff0c;非常不解&#xff0c;利用console.log测试&#xff0c;更加不解&#xff0c;可知抛出错误是 “ E 其他错误: userName required”。但是我在测试时&#xff0c;它并没有体现为空&#xff0c;…

(2023|NIPS,LLaVA-Med,生物医学 VLM,GPT-4 生成自指导指令跟随数据集,数据对齐,指令调优)

LLaVA-Med: Training a Large Language-and-Vision Assistant for Biomedicine in One Day 目录 LLaVA-Med: Training a Large Language-and-Vision Assistant for Biomedicine in One Day 0. 摘要 1. 简介 2. 相关工作 3. 生物医学视觉指令数据 4. 将多模态对话模型适配…