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: 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 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Word_笔记】Word的修订模式内容改为颜色标记

需求如下&#xff1a;请把修改后的部分直接在原文标出来&#xff0c;不要采用修订模式 步骤1&#xff1a;打开需要转换的word后&#xff0c;同时按住alt和F11 进入&#xff08;Microsoft Visual Basic for Appliations&#xff09; 步骤2&#xff1a;插入 ---- 模块 步骤3&…

【C++】字符数|组与字符串的深度解析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;一、字符数组的基本概念1. 什么是字符数组&#xff1f;2. C语言风格字符串的特点 &#x1f4af;二、字符数组的初始化1. 字符串直接赋值2. 按字符逐个赋值数据对比示例 &am…

计算机网络——网络层—IP数据报与分片

一、IP 数据报的格式 • 一个 IP 数据报由首部和数据两部分组成。 • 首部的前一部分是固定长度&#xff0c;共 20 字节&#xff0c;是所有 IP 数据报必须具有的。 • 在首部的固定部分的后面是一些可选字段&#xff0c;其长度是可变的。 IP 数据报首部的固定部分中的各字段 版…

【Python学习(八)——异常处理】

Python学习&#xff08;八&#xff09;——异常处理 本文介绍了异常处理的知识&#xff0c;仅作为本人学习时记录&#xff0c;感兴趣的初学者可以一起看看&#xff0c;欢迎评论区讨论&#xff0c;一起加油鸭~~~ 心中默念&#xff1a;Python 简单好学&#xff01;&#xff01;&…

Python 爬虫验证码识别

在我们进行爬虫的过程中&#xff0c;经常会碰到有些网站会时不时弹出来验证码识别。我们该如何解决呢&#xff1f;这里分享 2 种我尝试过的方法。 0.验证码示例 1.OpenCV pytesseract 使用 Python 中的 OpenCV 库进行图像预处理&#xff08;边缘保留滤波、灰度化、二值化、…

[离线数仓] 总结二、Hive数仓分层开发

接 [离线数仓] 总结一、数据采集 5.8 数仓开发之ODS层 ODS层的设计要点如下: (1)ODS层的表结构设计依托于从业务系统同步过来的数据结构。 (2)ODS层要保存全部历史数据,故其压缩格式应选择压缩比率,较高的,此处选择gzip。 CompressedStorage - Apache Hive - Apac…

GraphQL:强大的API查询语言

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

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 …

Docker入门之docker基本命令

Docker入门之docker基本命令 官方网站&#xff1a;https://www.docker.com/ 1. 拉取官方镜像并创建容器&#xff08;以redis为例&#xff09; 拉取官方镜像 docker pull redis# 如果不需要添加到自定义网络使用这个命令&#xff0c;如需要&#xff0c;直接看第二步 docker r…

“深入浅出”系列之FFmpeg:(1)音视频开发基础

我的音视频开发大部分内容是跟着雷霄骅大佬学习的&#xff0c;所以笔记也是跟雷老师的博客写的。 一、音视频相关的基础知识 首先播放一个视频文件的流程如下所示&#xff1a; FFmpeg的作用就是将H.264格式的数据转换成YUV格式的数据&#xff0c;然后SDL将YUV显示到电脑屏幕上…

【JAVA基础】Collections方法的具体使用方法

java基础中Collections及collect(toList,toSet,toMap)的用法 package com.gaofeng;import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream;public class demo01 {public static void main(String[] …

深度学习知识点:RNN

文章目录 1.简单介绍2.网络结构3.应对梯度消失 1.简单介绍 循环神经网络&#xff08;RNN&#xff0c;Recurrent Neural Network&#xff09;是一类用于处理序列数据的神经网络。与传统网络相比&#xff0c;变化不是特别大&#xff0c;不如CNN的变化那么大。 为什么要有循环神经…

超完整Docker学习记录,Docker常用命令详解

前言 关于国内拉取不到docker镜像的问题&#xff0c;可以利用Github Action将需要的镜像转存到阿里云私有仓库&#xff0c;然后再通过阿里云私有仓库去拉取就可以了。 参考项目地址&#xff1a;使用Github Action将国外的Docker镜像转存到阿里云私有仓库 一、Docker简介 Do…

MySQL学习笔记(二)

一、SQL-函数 函数-介绍 函数是指一段可以直接被另一段程序调用的程序或代码。 字符串函数 示例 --concat select concat(Hello,MySql); --upper select upper(Hello); --lpad select lpad(01,5,-); --trim select trim( Hello MySQL ); --中间空格还在&#xff0c;头尾…

java mail 535 Login Fail. Please enter your authorization code to login

报错信息提示查看 https://service.mail.qq.com/detail/0/53 帮助页面意思就是说你要使用授权码登录, 但是授权码我已经正确的设置上去了 后面从 QQ邮箱出现错误 Please enter your authorization code to_邮件群发-双翼邮件群发软件官方网 看到 账户 需要是 QQ号 例如…

mysql、postgresql、druid链接池踩坑记录

The last packet successfully received from the server wIs 10,010 milliseconds ago. The last packet sent successfully to the server was 10,010 milliseconds ago.### The error may exist in URL mysql 链接字符串没有 &connectTimeout600000&socketTimeout6…

安卓NDK视觉开发——手机拍照文档边缘检测实现方法与库封装

一、项目创建 创建NDK项目有两种方式&#xff0c;一种从新创建整个项目&#xff0c;一个在创建好的项目添加NDK接口。 1.创建NDK项目 创建 一个Native C项目&#xff1a; 选择包名、API版本与算法交互的语言&#xff1a; 选择C版本&#xff1a; 创建完之后&#xff0c;可…

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

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

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

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

spark汇总

目录 描述运行模式1. Windows模式代码示例 2. Local模式3. Standalone模式 RDD描述特性RDD创建代码示例&#xff08;并行化创建&#xff09;代码示例&#xff08;读取外部数据&#xff09;代码示例&#xff08;读取目录下的所有文件&#xff09; 算子DAGSparkSQLSparkStreaming…