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、高性能、高扩展性、高可用①高性…

【JavaEE进阶】获取Cookie/Session

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

《Spring Framework实战》3:概览

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

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

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

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

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]。 本文不讨论用户界面的布局&…

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

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

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

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

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. 将多模态对话模型适配…

(概率论)无偏估计

参考文章&#xff1a;(15 封私信 / 51 条消息) 什么是无偏估计&#xff1f; - 知乎 (zhihu.com) 首先&#xff0c;第一个回答中&#xff0c;马同学图解数学讲解得很形象&#xff0c; 我的概括是&#xff1a;“注意&#xff0c;有一个总体的均值u。然后&#xff0c;如果抽样n个&…

国产游戏崛起,燕云十六移动端1.9上线,ToDesk云电脑先开玩

游戏爱好者的利好消息出新了&#xff01;网易大型武侠仙游《燕云十六声》正式官宣&#xff0c;移动端要在1月9日正式上线了&#xff01;你期待手游版的燕云吗&#xff1f;不妨评论区留言说说你的看法。小编分别花了几个小时在台式机电脑和手机上都试了下&#xff0c;欣赏画面还…

VS2022引入sqlite数据库交互

法一&#xff1a;用官网编译好的动态库(推荐) 下载所需文件 sqlite官网地址&#xff1a;https://www.sqlite.org/howtocompile.html 下载以下的2个压缩包 第一个压缩包 sqlite-amalgamation-xxxx.zip&#xff0c;xxxx是版本号,保持一致即可&#xff0c;这里面有sqite3.h 第…

Java后端常用的4种请求方式(通俗易懂)

文章目录 前言通用接口类(ControllerDemo)通用实体类(UserEntity)通用响应类(HttpClientResult)成功截图(先启动项目,然后右键执行main方法) HttpClientHttpClient 的主要类代码案例导入依赖工具类(HttpClientUtil)测试类 HttpURLConnection简介调用步骤代码案例导入依赖工具类…

STM32烧写失败之Contents mismatch at: 0800005CH (Flash=FFH Required=29H) !

一&#xff09;问题&#xff1a;用ULINK2给STM32F103C8T6下载程序&#xff0c;下载方式设置如下&#xff1a; 出现下面两个问题&#xff1a; 1&#xff09;下载问题界面如下&#xff1a; 这个错误的信息大概可以理解为&#xff0c;在0x08000063地址上读取到flash存储为FF&am…

Spring Boot教程之五十二:CrudRepository 和 JpaRepository 之间的区别

Spring Boot – CrudRepository 和 JpaRepository 之间的区别 Spring Boot建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。由于其快速的生产就绪环境&#xff0c;使开发人员能够直接专注于逻辑&#xff0c;而不必费力配置和设置&#xff0c;因此如今它正成为开发人员…

【SQL】Delete使用

目录 语法 需求 示例 分析 代码 语法 DELETE删除表中所需内容 删除表中满足特点条件的行&#xff1a;DELETE FROM 表名 WHERE 条件; 删除表中所有行&#xff1a;DELETE FROM 表名; WHERE子句 WHERE子句用于指定从表中选取记录的条件。允许筛选数据&#xff0c;只返回满足…

【express-generator】05-路由中间件和错误处理(第一阶段收尾)

一、前言 上篇文章我们介绍了express-generator的请求体解析&#xff0c;重点讲了常用的请求体数据格式&#xff08;JSON/URL 编码的表单数据&#xff09;以及一个FILE文件上传&#xff0c;同时搭配代码示范进行辅助理解。 二、本篇重点 我们继续第一阶段的知识&#xff0c;…

Vue3(elementPlus) el-table替换/隐藏行箭头,点击整行展开

element文档链接&#xff1a; https://element-plus.org/zh-CN/component/form.html 一、el-table表格行展开关闭箭头替换成加减号 注&#xff1a;Vue3在样式中修改箭头图标无效&#xff0c;可能我设置不对&#xff0c;欢迎各位来交流指导 转变思路&#xff1a;隐藏箭头&…