SpringBoot之核心配置

news2025/1/10 2:56:43

学习目标:

        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: 1
    name: 张三
    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: 1
  name: 张三
  isboy: true
  hobby:
    play,
    read,
    sleep
  map:
    k1: value1
    k2: value2
  pet:
    name: amy
    type: cat

最后,在测试类中引入 Person 实体类 Bean,并进行输出测试。

    @Autowired
	public Person person;

	@Test
	public void demo(){
		System.out.println(person);
	}

 2.2.@Value注入属性

@Value注解是 Spring 框架提供的,用来读取配置文件中的属性值并逐个注入 Bean 对象的对应属性中

application.yml 配置文件中添加属性值初始化的配置。

student:
  sid: 1
  sname: 李四
  hobby: play,read,write
  family: father,mother
  maps:
    k1: value1
    k2: value2
  pet:
    type: cat
    name: 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,并进行输出测试。

    @Autowired
	public Student student;
	
	@Test
	public 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-changsha

sms-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,并进行输出测试。

    @Autowired
	public SmsSenderConfiguration smsSenderConfiguration;

	@Test
	public 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,并进行输出测试。

	@Autowired
	public SmsSenderConfiguration smsSenderConfiguration;

	@Test
	public 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{
    @Override
    public String confiure() {
        String msg="DEV";
        System.out.println(msg);
        return msg;
    }
}

最后运行

    @Autowired
	public IDBConnector dbConnectorDev;

	@Test
	public void demo(){
		System.out.println(dbConnectorDev.confiure());
	}

5.参数间引用

在 Spring Boot 的全局配置文件application.yml中

person:
    id: 1
    name: 张三
    isboy: true
    hobby:
      play,
      read,
      sleep
    map:
      k1: value1
      k2: value2
    pet:
      name: amy
      type: cat
student:
    sid: 1
    sname: ${person.name}
    hobby: play,read,write
    family: father,mother
    maps:
      k1: value1
      k2: value2
    pet:
      type: cat
      name: jerry

Student中的sname引用的是person中的name,我们运行一下看Student中的sname是不是person的name

    @Autowired
	public Student student;

	@Test
	public void demo(){
		System.out.println(student);
	}

这是最基本的引用方式了

本期就到这里结束了,再见ヾ(≧▽≦*)o 

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

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

相关文章

openai swarm agent框架源码详解及应用案例实战

文章目录 简介数据类型Agent类Response类Result类Swarm类run_demo_loop交互式会话 基础应用agent-handsofffunction-callingcontext_variablestriage_agent 高阶应用通用客服机器人(support bot)构建航班服务agent 参考资料 openai 在24年10月份开源了一个教育性质的多agents协…

JVM vs JDK vs JRE

JVM是Java虚拟机的缩写&#xff0c; 用于实现Java的一次编译&#xff0c;处处运行。 Java代码写成.class后&#xff0c;由本地的虚拟机运行。 JDK&#xff08;Java Development Kit&#xff09;是一个功能齐全的 Java 开发工具包&#xff0c;供开发者使用。 JDK包含了JRE。…

【网页自动化】篡改猴入门教程

安装篡改猴 打开浏览器扩展商店&#xff08;Edge、Chrome、Firefox 等&#xff09;。搜索 Tampermonkey 并安装。 如图安装后&#xff0c;浏览器右上角会显示一个带有猴子图标的按钮。 创建用户脚本 已进入篡改猴管理面板点击创建 脚本注释说明 name&#xff1a;脚本名称。…

微信小程序用的SSL证书有什么要求吗?

微信小程序主要建立在手机端使用&#xff0c;然而手机又涉及到各种系统及版本&#xff0c;所以对SSL证书也有要求&#xff0c;如果要小程序可以安全有效的访问需要满足以下要求&#xff1a; 1、原厂SSL证书&#xff08;原厂封&#xff09;。 2、DV单域名或者DV通配符。 3、兼…

【电子通识】PWM驱动让有刷直流电机恒流工作

电机的典型驱动方法包括电压驱动、电流驱动以及PWM驱动。本文将介绍采用PWM驱动方式的恒流工作。 首先介绍的是什么是PWM驱动的电机恒流工作&#xff0c;其次是PWM驱动电机恒流工作时电路的工作原理。 PWM驱动 当以恒定的电流驱动电机时&#xff0c;电机会怎样工作呢&#xff1…

Unity学习之UGUI进阶

一、事件监听接口 1、作用 用于实现类型长按、双击、拖拽等基础控件无法实现的功能 所有控件都能够添加更多的事件监听来处理对应的逻辑 2、事件监听接口类型 &#xff08;1&#xff09;常用事件接口 &#xff08;2&#xff09;不常用事件接口 3、使用事件监听接口 &#…

电脑硬盘系统迁移及问题处理

一、系统迁移准备 1、确认你的电脑主板是否支持安装两块硬盘,如电脑主板有多个M2硬盘接口,我们将新硬盘安装到主板上,原来的老硬盘安装在第二个接口上,主板只有一个M2接口的话可以使用移动硬盘盒。 2、新硬盘安装好后,我们进入原来的系统,在 此电脑–右键–管理–磁盘管…

【NLP高频面题 - Transformer篇】Transformer的输入中为什么要添加位置编码?

Transformer的输入中为什么要添加位置编码&#xff1f; 重要性&#xff1a;★★★ Transformer 将句子中的所有词并行地输入到神经网络中。并行输入有助于缩短训练时间&#xff0c;同时有利于学习长期依赖。不过&#xff0c;并行地将词送入 Transformer&#xff0c;却不保留词…

http range 下载大文件分片

摘自&#xff1a;https://www.jianshu.com/p/32c16103715a 上传分片下载也能分 HTTP 协议范围请求允许服务器只发送 HTTP 消息的一部分到客户端。范围请求在传送大的媒体文件&#xff0c;或者与文件下载的断点续传功能搭配使用时非常有用。 检测服务器端是否支持范围请求 假…

Improving Language Understanding by Generative Pre-Training GPT-1详细讲解

Improving Language Understanding by Generative Pre-Training 2018.06 GPT-1 0.有监督、半监督、无监督 CV&#xff1a;ImageNet pre-trained model NLP&#xff1a;pre-trained model? 在计算机视觉中任务包含分类、检测、分割&#xff0c;任务类别数少&#xff0c;对应…

onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制

文章目录 1. 页面跳转方式2. 你的场景分析3. 页面生命周期4. 总结5. 建议 在微信小程序中&#xff0c;页面跳转时&#xff0c; onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制。以下是详细说明&#xff1a; 1. 页面跳转方式 微信小程序提供了多种页面…

后台管理系统引导功能的实现

引导是软件中经常见到的一个功能&#xff0c;无论是在后台项目还是前台或者是移动端项目中。 那么对于引导页而言&#xff0c;它是如何实现的呢&#xff1f;通常情况下引导页是通过 聚焦 的方式&#xff0c;高亮一块视图&#xff0c;然后通过文字解释的形式来告知用户该功能的作…

vue js实现时钟以及刻度效果

2025.01.08今天我学习如何用js实现时钟样式&#xff0c;效果如下&#xff1a; 一、html代码如下&#xff1a; <template><!--圆圈--><div class"notice_border"><div class"notice_position notice_name_class" v-for"item in …

CSS Grid 布局全攻略:从基础到进阶

文章目录 一.Grid 是什么二.示例代码1. 基础使用 - 固定宽高2.百分百宽高3.重复设置-repeat4.单位-fr5.自适应6.间距定义其他 一.Grid 是什么 CSS 中 Grid 是一种强大的布局方式&#xff0c;它可以同时处理行和列 Grid 和Flex有一些类似&#xff0c;都是由父元素包裹子元素使用…

【adb】5分钟入门adb操作安卓设备

ADB&#xff08;Android Debug Bridge&#xff09; 是一个多功能的命令行工具&#xff0c;用于与 Android 设备进行交互、调试和管理。它提供了对设备的直接控制&#xff0c;能够帮助开发者进行调试、安装应用、传输文件等。 目录 将设备和电脑连接 adb shell 文件的基本操…

Jenkins-持续集成、交付、构建、部署、测试

Jenkins-持续集成、交付、构建、部署、测试 一: Jenkins 介绍1> Jenkins 概念2> Jenkins 目的3> Jenkins 特性4> Jenkins 作用 二&#xff1a;Jenkins 版本三&#xff1a;DevOps流程简述1> 持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff0…

Golang笔记:使用net包进行TCP监听回环测试

文章目录 前言TCP监听回环代码演示 附&#xff1a;UDP监听回环 前言 TCP是比较基础常用的网络通讯方式&#xff0c;这篇文章将使用Go语言实现TCP监听回环测试。 本文中使用 Packet Sender 工具进行测试&#xff0c;其官网地址如下&#xff1a; https://packetsender.com/ TC…

SSL 证书格式和证书文件扩展名:完整指南

SSL 证书是什么以及它如何工作相当容易理解。但当涉及到在服务器上安装它时&#xff0c;有时&#xff0c;你可能觉得这是在处理火箭科学。 由于有如此多的SSL 证书格式与特定服务器要求相关&#xff0c;您更有可能感到困惑和沮丧&#xff0c;而不是从一开始就正确配置证书。但…

【源码+文档+调试讲解】项目申报小程序

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代…

echarts横向柱状图胶囊

echarts配置项 tooltip: {trigger: axis, // 触发tooltip提示类型 axis:坐标轴触发axisPointer: {type: cross, // 指示器类型 cross: 十字准星指示器crossStyle: {color: #999 // 线颜色}} }, grid: { left: 0%, //离容器左侧的距离top:5%,bottom: 3%,containLabel: true…