当前位置: 首页 > article >正文

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 


http://www.kler.cn/a/472922.html

相关文章:

  • 网络安全-web应用程序发展历程(基础篇)
  • 关于Mac使用VSCode连接虚拟机
  • LeetCode 第34题:二分查找+扩展搜索
  • C# 实现 gRPC 进程间通讯:两台设备的数据交换之道
  • 前后端分离架构设计与实现:构建现代Web应用的基石
  • ros2-4.1 服务通信介绍
  • vs2022编译webrtc步骤
  • 搭建个人知识库,支持Word、PDF、txt等,一般电脑也能玩。
  • Vue3 el-tree-v2渲染慢的问题
  • Linux系列(二)安装Linux和Linux目录结构
  • <代码随想录> 算法训练营-2025.01.03
  • xxl-job回调执行器,发生NPE空指针异常
  • ios脚本巨魔商店多巴胺越狱基本操作教程
  • 数据库环境安装(day1)
  • 基于html5实现音乐录音播放动画源码
  • 阶梯费用计算demo
  • 超详细的 JDK环境配置步骤图文教程
  • 《C++11》右值引用深度解析:性能优化的秘密武器
  • linux安全更新zookeeper docker
  • Python创建GitHub标签的Django管理命令
  • unity TextMeshPro使用window字体的方式
  • LVGL源码(4):LVGL关于EVENT事件的响应逻辑
  • CAD批量打印可检索的PDF文件
  • Redis 性能优化:利用 MGET 和 Pipeline 提升效率
  • 软件测试的未来:如何跨越自动化到自主测试的鸿沟
  • 【深度学习系统】Lecture 4 - Automatic Differentiation