SpringBoot(一)基础

1 约定优于配置

Build Anything with Spring Boot: Spring Boot is the starting point for building all Spring-based application. Spring Boot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring.

上面是引用自官网的一段话,意思是说:Spring Boot是所有基于Spring开发的项目的起点。Spring Boot的设计是为了让你尽可能快的运行起来Spring应用程序并且尽可能减少你的配置文件。

约定优于配置(Convention over Configuration),又称为按约定编程,是一种软件设计范式。

本质上是说,系统、类库或框架应该假定合理的默认值,而非要求提供不必要的配置。比如说模型中有一个名为User的类,那么数据库中对应的表就会默认命名为user。只有再偏离这一个约定的时候,例如想要将该表命名为person,才需要写有关这个名字的配置。

比如平时架构师搭建项目就是限制软件开发随便写代码,制定出一套规范,让开发人员按统一的要求进行开发编码测试之类的,这样就加强了开发效率与审查代码效率。所以说写代码的时候就需要按照要求命名,这样统一规范的代码就有良好的可读性与维护性了

约定优于配置简单理解,就是遵循约定

2 SpringBoot 概念

2.1 Spring 优缺点分析

  • 优点
    Spring是Java企业版(Java Enterprise Edition,JEE,也称为J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能
  • 缺点
    虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以替代XML。
    所以这些配置都代表了开发时的损耗。因为再思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求回报也不少。
    除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之又依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度

2.2 SpringBoot解决上述spring问题

SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必再配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期
起步依赖
起步依赖本质上是一个Maven项目对象模块(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能
简单来说,起步依赖就是将具备某中功能的坐标打包到一起,并提供一些默认的功能。
自动配置
SpringBoot的自动配置,指的是SpringBoot,会自动将一些配置类的bean注册进IOC容器,我们可以需要的地方使用@Autowried或@Resource等注解来使用它。
“自动”的表现形式就是我们只需要引我们想用功能的包,相关的配置我们完全不用管,SpringBoot会自动注入这些配置bean,我们直接使用这些bean即可
SpringBoot:简单、快速、方便的搭建项目;对主流开发框架的无配置集成;极大提高了开发、部署效率

3 SpringBoot 案例实现

案例需求:请求Controller中的方法,并将返回值响应到页面
(1)使用Spring Initializr方式构建SpringBoot项目
本质上说,Spring Initializr 是一个Web项目,它提供了一个基本的项目结构,能够帮助我们快速构建一个基础的Spring Boot项目。通过访问Spring Initializr进行项目快速创建
快速创建项目的页面

(2)创建一个用于Web访问的Controller
com.example包下创建名称为controller的包,在该包下创建一个请求处理控制类HelloController,并编写一个请求处理方法(注意:将项目启动类SpringBootDemoApplication移动到com.example包下

//该注解为组合注解,等于Spring中@Controller+@ResponseBody注解
@RestController
public class HelloController{
	
	@RequestMapping("/hello")
	public String hello(){
		return "hello spring boot"
	}
}

(3)运行项目
运行主程序启动类SpringBootDemoApplication,项目启动成功后,在控制台上会发现Spring Boot项目默认启动的端口号是8080,此时,可以在浏览器上访问http://127.0.0.1:8080/hello地址,页面上会输出 hello spring boot。

4 单元测试与热部署

(1)单元测试
开发中,每当完成一个功能接口或者业务方法的编写后,通常都会借助单元测试验证改功能是否正确。Spring Boot对项目的单元测试提供了很好的支持,在使用时,需要提前在项目的pom.xml文件中添加spring-boot-starter-test测试依赖启动器,可以通过相关注解实现单元测试

演示:

  1. 添加spring-boot-starter-test测试依赖启动器
    在项目的pom.xml文件中添加spring-boot-starter-test测试依赖启动器,示例代码如下:
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>

注意:使用Spring Initializr方式搭建Spring Boot项目,会自动加入spring-boot-starter-test测试依赖启动器,无需再手动添加

  1. 编写单元测试类和测试方法
    使用Spring Initializr方式搭建Spring Boot项目,会在src.test.java测试目录下自动创建与项目主程序启动类对应的单元测试类
//测试启动器,并加载SpringBoot测试注解
@RunWith(SpringRunner.class)
//标记为Spring Boot单元测试,并加载项目的ApplicationContext上下文环境
@SpringBootTest
public class SpringBootDemoApplicationTests{
	
	@Autowried
	private HelloController helloController;

	//自动创建的单元测试方法实例
	@Test
	public void contextHolder(){
		String hello = helloController.hello();
		System.out.println(hello);
	}
}
上述代码中,先使用@Autowired注解注入了HelloController实例对象,然后再contextHolder()方法中调用了HelloController类中对应的请求控制方法hello(),并输出打印结果:
hello spring boot

(2)热部署
在开发过程中,通常会对一段业务代码不断地修改测试,在修改之后往往需要重启服务,有些服务需要加载很久才能启动成功,这种不必要的重复操作极大的降低了程序开发效率。为此,Spring Boot框架专门提供了进行热部署的依赖启动器,用于进行项目热部署,而无需手动重启项目
演示:

  1. 添加spring-boot-devtools热部署依赖启动器
    在SpringBoot项目进行热部署测试之前,需要现在项目的pom.xml文件中添加spring-boot-devtools热部署依赖启动器:
<!-- 引入热部署依赖 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>

由于使用的是IDEA开发工具,添加热部署依赖后可能没有任何效果,接下来还需要针对IDEA开发工具进行热部署相关的功能设置

  1. IDEA工具热部署设置
    选择IDEA工具界面的【File】->【Settings】选项,打开Compiler面板设置页面
    开启自动编译的设置页面
    选择Build下的Compiler选项,在右侧勾选“Build project automatically”选项将项目设置为自动编译,单机【Apply】->【OK】按钮保存设置
    在项目任意页面中使用组合键Ctrl+Shift+Alt+/打开Maintenance选项框,选中并打开Registry页面,如下图所示
    Maintenance页面
    列表中找到“compiler.automake.allow.when.app.running”,将该选项后的value值勾选,用于指定IDEA工具在程序运行过程中自动编译,最后单机【Close】按钮完成设置

  2. 热部署效果测试
    启动Demo并访问http://127.0.0.1:8080/hello
    页面上原始输出内容是“hello spring boot”
    为了测试配置的热部署是否有效,接下来,在不关闭当前项目的情况下,将HelloController类中的请求厨房里方法hello()返回值修改为“你好,spring boot”并保存,查看控制台信息会发现项目能够自动构建和编译,说明热部署生效。

不过在开发过程中,如果需要长时间修改一段代码,每保存一次就重新启动一次,这样是不是也不太好哈。所以我一般不用这个功能

5 全局配置文件

全局配置文件能够对一些默认配置值进行修改。Spring Boot使用一个application.properties或者application.yaml的文件作为全局配置文件。该文件存放在src/main/resource目录或者类路径/config,一般会选择resource目录。接下来,将针对这两种全局配置文件进行说明:

5.1 application.properties配置文件

使用Spring Initializr方式构建SpringBoot项目时,会在resource目录下自动生成一个空的application.properties文件,Spring Boot项目启动时会自动加载application.properties文件。

我们可以在application.properties文件中定义Spring Boot项目的相关属性,当然,这些相关属性可以是系统属性、环境变量、命令参数等信息,也可以是自定义配置文件名称和位置

server.port=8443
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.config.additional-location=
spring.config.location=
spring.config.name=application

接下来,通过一个案例对Spring Boot项目中application.properties配置文件的具体使用进行说明
演示:
预先准备两个实体类,后续会演示将application.properties配置文件中的自定义配置属性注入到Person实体类对应的属性中
(1)在com.example包下创建一个po包,并在该包下创建两个实体类Pet和Person

public class Pet{
	private String type;
	private String name;
	
	//...省略getXX()和setXX()方法、省略toString 方法
}
//用于将Person类作为Bean注入到Spring容器中
@Component
//将配置文件中以person开头的属性注入到该类中
@ConfigurationProperties(prefix = "person")
public class Person{
	//id
	private int id;
	//名称
	private String name;
	//爱好
	private List hobby;
	//家庭成员
	private String[] family;
	private Map map;
	//宠物
	private Pet pet;
	
	//...省略getXX()和setXX()方法、省略toString 方法
}

@ConfigurationProperties(prefix = “person”) 注解的作用是将配置文件中以person开头的属性值通过setXX()方法注入到实体类对应的属性中
@Component注解的作用是将当前注入属性值的Person类对象作为Bean组件放到Spring容器中,只有这样才能被@ConfigurationProperties注解进行赋值

(2)打开项目的resources目录下的application.properties配置文件,在该配置文件中编写需要对Person类设置的配置属性

person.id=1
person.name=tom
person.hobby=吃饭,睡觉,看电影
person.famliy=father,mother
person.map.k1=v1
person.map.k2=v2
person.pet.type=dog
person.pet.name=旺财

编写application.properties配置文件时,由于要配置的Person对象属性是我们自定义的,SpringBoot无法自动识别,所以不会有任何书写提示。在实际开发中,为了出现代码提示的效果来方便配置,在使用@ConfigurationProperties注解进行配置文件属性值注入时,可以在pom.xml文件中添加一个Spring Boot提供的配置处理器依赖:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

在pom.xml中添加上述依赖后,还需要重新启动项目启动类或者使用Ctrl+F9快捷键(即Build Project)重构当前Spring Boot项目方可生效
(3)查看application.properties配置文件是否正确,同时查看配置属性效果,打开通过IDEA工具创建的项目测试类,在该测试类中引入Person实体类Bean,并进行输出测试

//测试启动器,并加载SpringBoot测试注解
@RunWith(SpringRunner.class)
//标记为Spring Boot单元测试,并加载项目的ApplicationContext上下文环境
@SpringBootTest
public class SpringBootDemoApplicationTests{
	
	@Autowried
	private Person person;

	//自动创建的单元测试方法实例
	@Test
	public void test(){
		System.out.println(person);
	}
}

打印结果如下:
Person(id=1,name=‘tom’,hobby=[吃饭,睡觉,看电影],famliy=[father,mother],map={k1=v1,k2=v2},pet={type=‘dog’,name=‘旺财’})
可以看出,测试方法test()运行成功,同时正确打印出了Person实体类对象。至此,说明application.properties配置文件属性配置正确,并通过相关注解自动完成了属性注入

5.2 application.yaml配置文件

YAML(英语发音:/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达资料序列的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。目前已经有数种编程语言或脚本语言支援(或者说解析)这种语言。YAML是”YAML Ain’t a Markup Language”(YAML不是一种标记语言)的递回缩写。在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重新命名。AML的语法和其他高阶语言类似,并且可以简单表达清单、散列表,标量等资料形态。它使用空白符号缩排和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定档、倾印除错内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。尽管它比较适合用来表达阶层式(hierarchical model)的数据结构,不过也有精致的语法可以表示关联性(relational model)的资料。由于YAML使用空白字元和分行来分隔资料,使得它特别适合用grep/Python/Perl/Ruby操作。其让人最容易上手的特色是巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在巢状结构时会变得复杂而难以辨认。 —— 维基百科

YAML文件格式是Spring Boot支持的一种JSON超集文件格式,相较于传统的Properties配置文件,YAML文件以数据为核心,是一种更为直观且容易被机器识别的数据序列化格式。application.yaml配置文件的工作原理和application.properties是一样的,只不过yaml格式看起来更简洁一些。

  • YAML文件的扩展名可以使用.yml或者.yaml
  • application.yml文件使用“key:(空格)value”格式配置属性,使用缩进控制层级关系

这里,针对不同数据类型的属性值,介绍一下YAML
(1)value值为普通数据类型(例如:数字、字符串、布尔等)
当YAML配置文件中配置的属性值为普通数据类型时,可以直接配置对应的属性值,通过对于字符串类型的属性值,不需要额外添加引号,示例代码如下

server: 
  port: 8081
  path: /hello

上述代码配置server的port和path属性,port和path属于一个级别
(2)value值为数组和单列集合
当YAML配置文件中配置的属性值为数组或者单列集合类型时,主要有两种书写方式:缩进式写法和行内式写法。其中,缩进式写法还有两种表示形式,示例代码如下

person: 
  hobby:
    - play
    - read
    - sleep

或者使用如下示例形式

person: 
  hobby:
    play,
    read,
    sleep

上述代码中,在YAML配置文件中通过两种缩进式写法对person对象的单列集合(或数组)类型的爱好hobby赋值为play、read和sleep。其中一种形式为“-(控制)属性值”,另一种形式为多个属性值之间加英文逗号分隔(注意,最后一个属性值后不要加逗号)。

person: 
  hobby: [play,read,sleep]

通过上述示例对比发现,YAML配置文件的行内式写法更加简明、方便。另外,包含属性值的中括号“[]”还可以进一步省略,在进行属性赋值时,程序会自动匹配和校对
(3)value值为Map集合和对象
当YAML配置文件中配置的属性值为Map集合和对象类型时,YAML配置文件格式同样可以分为两种书写方式:缩进式写法和行内式写法
其中,缩进式写法的示例代码如下

person: 
  map: 
    k1: v1
    k2: v2

对应的行内式写法示例代码如下

person: 
  map: {k1: v1,k2: v2}

在YAML配置文件中,配置的属性值为Map集合或者对象类型时,缩进式写法的形式按照YAML文件格式编写即可,而行内式写法的属性值要用大括号“{}”包含。
接下来,在Properties配置文件演示案例基础上,通过配置application.yaml配置文件对Person对象进行赋值,具体使用如下
(1)在项目的resources目录下,新建一个application.yaml配置文件,在该配置文件中编写为Person类设置配置属性

#对实体类对象Person进行属性配置
person: 
  id: 1
  name: jack
  hobby: [吃饭,睡觉,看电影]
  famliy: [father,mother]
  map: {k1: v1,k2: v2}
  pet: {type: dog,name: 旺财}

(2)再次执行测试,打印结果如下:
Person(id=1,name=‘jack’,hobby=[吃饭,睡觉,看电影],famliy=[father,mother],map={k1=v1,k2=v2},pet={type=‘dog’,name=‘旺财’})
可以看出,测试方法test()同样运行成功,并正确打印出了Person实体类对象

需要说明的是:本次使用application.yaml配置文件进行测试时需要提前将application.properties配置文件中编写的配置注释,这是因为application.properties配置文件会覆盖application.yaml配置文件

6 配置文件属性值的注入

使用Spring Boot全局配置文件设置属性时:
如果配置属性是Spring Boot已有属性时,例如服务端口server.port,那么Spring Boot内部会自动扫描并读取这些配置文件中的属性值并默认覆盖属性。
如果配置属性时用户自定义属性,例如上面自定义的Person实体类属性,还必须在程序中注入这些配置属性方可生效
Spring Boot支持多种注入配置文件属性的方式,下面来介绍如何使用注解@ConfigurationProperties和@Value注入属性

6.1 使用@ConfigurationProperties注入属性

Spring Boot 提供@ConfigurationProperties注解用来快速、方便地将配置文件中的自定义属性值批量注入到某个Bean对象的多个对象属性中,假设现在有一个配置文件,如果使用@ConfigurationProperties注入配置文件的属性,示例代码如下:

@Component
@ConfigurationProperties(prefix = "person")
public class Person{
	private int id;
	public void setId(int id){
		this.id = id;
	}
}

上述代码使用@Component和@ConfigurationProperties(prefix = “person”)将配置文件中的每个属性映射到person类组件中
需要注意的是,使用@ConfigurationProperties注解,需要生成属性对应的setXX()方法

6.2 使用@Value注入属性

@Value注解是Spring框架提供的,用来读取配置文件中的属性值并逐个注入到Bean对象的对应的属性中,Spring Boot框架从Spring框架中对@Value注解进行了默认继承,所以在Spring Boot框架中还可以使用该注解读取和注入配置文件属性值。使用@Value注入属性的示例代码如下

@Component
public class Person{
	@Value("${person.id}")
	private int id;
}

上述代码中,使用@Component和@Value注入Person实体类的id属性。其中,@Value不仅可以将配置文件的属性注入Person的id属性,还可以直接给id属性赋值,这点是@ConfigurationProperties不支持的
演示@Value注解读取并注入配置文件属性的使用:
(1)在com.example.po包下新建一个实体类Student,并使用@Value注解注入属性

@Component
public class Student{
	@Value("${person.id}")
	private int id;
	@Value("${person.name}")
	private String name;
}

Student类使用@Value注解将配置文件的属性值读取和注入。
从上述示例代码中可以看出,使用@Value注解方式需要对每一个属性注入设置,同时又免去了属性的setXX()方法
(2)再次打开测试类进行测试

//测试启动器,并加载SpringBoot测试注解
@RunWith(SpringRunner.class)
//标记为Spring Boot单元测试,并加载项目的ApplicationContext上下文环境
@SpringBootTest
public class SpringBootDemoApplicationTests{
	@Autowried
	private Student student;

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

打印结果如下:
Student{id=1,name=‘jack’}
从上述测试结果可以看出,方法成功运行且打印出正确的Student实体类对象。需要说明的是,本示例只是使用@Value注解及实例中Student对象的普通类型属性进行赋值演示,而 @Value注解对于包含Map集合、对象以及YAML文件格式的行内写法的配置文件的属性注入都不支持,如果强行赋值会出现错误

7 自定义配置

Spring Boot免除了项目中大部分的手动配置,对于一些特定情况,我们可以通过修改全局配置文件以适应具体生产环境,可以说,几乎所有的配置都可以写在application.properties文件中,Spring Boot会自动加载全局配置文件从而免去我们手动加载的烦恼。但是,如果我们自定义配置文件,Spring Boot是无法识别这些配置文件的,此时就需要我们手动加载,接下来,将针对Spring Boot的自定义配置文件及其加载方式进行说明

7.1 使用@PropertySource加载配置文件

对于这种加载自定义配置文件的需求,可以使用@PropertySource注解结合@Configuration注解配置类的方式实现。@PropertySource注解用于指定自定义配置文件的具体位置和名称,同时,为了保证Spring Boot能够扫描该注解,还需要类上添加@Configuration注解将实体类作为自定义配置类。
当然,如果需要将自定义配置文件中的属性值注入到对应类的属性中,可以使用@ConfigurationProperties或者@Value注解进行属性值注入
演示:
(1)打开项目的resources目录,在项目的类路径下新建一个test.properties自定义配置文件,在该配置文件中编写需要设置的配置属性

# 对该实体类对象MyProperties进行属性配置
test.id = 110
test.name = test

(2)在com.example.po包下新建一个配置类MyProperties,提供test.properties自定义配置文件中对应属性,并根据@PropertySource注解的使用进行相关配置

//自定义配置类
@Configuration
//指定自定义配置文件位置和名称
@PropertySource("classpath:test.properties")
//开启对应配置类的属性注入功能
@EnableConfigurationProperties(MyProperties.class)
//指定配置文件注入属性前缀
@ConfigurationProperties(prefix = "test")
public class MyProperties{
	private int id;
	private String name;
	public void setId(int id){
		this.id  = id;
	}
	public void setName(String name){
		this.name = name;
	}
}

主要是一个自定义配置类,通过相关注解引入自定义的配置文件,并完成了自定义属性值的注入。针对示例中的几个注解,具体说明如下

  • @Configuration注解表示当前类是一个自定义配置类,并添加为Spring容器的组件,这里也可以使用传统的@Component注解。
  • @PropertySource(“classpath:test.properties”)注解指定了自定义配置文件的位置和名称,此实例表示自定义配置文件为classpath类路径下的test.properties文件。
  • @ConfigurationProperties(prefix = “test”) 注解将上述自定义配置文件test.properties中以test开头的属性值注入到该配置类属性中。
  • 如果配置类上使用的是@Component注解而非@Configuration注解,那么@EnableConfigurationProperties注解还可以省略
    (3)进行测试
@Autowried
private MyProperties myProperties;

@Test
public void myPropertiesTest(){
	System.out.println(myProperties)
}

打印结果如下:
MyProperties{id=110,name=‘test’}

7.2 使用@Configuration编写自定义配置类

在Spring Boot框架中,推荐使用配置类的方式向容器中添加和配置组件
在Spring Boot框架中,通常使用@Configuration注解定义一个配置类,Spring Boot会自动扫描和识别配置类,从而替换传统Spring框架中的XML配置文件
当定义一个配置类后,还需要在类中的方法上使用@Bean注解进行组件配置,将方法的返回对象注入到Spring容器当中,并且组件名称默认使用的是方法名,当然也可以使用@Bean注解的name或value属性自定义组件的名称
演示:
(1)在项目下新建一个com.example.config包,并在该包下新创建一个类MyService,该类中不需要编写任何代码

public class MyService{
}

创建了一个空的MyService类,而该类目前没有添加任何配置和注解,因此还无法正常被Spring Boot扫描和识别
(2)在项目的com.example.config包下,新建一个类MyConfig,并使用@Configuration注解将该类声明一个配置类,内容如下

//定义该类是一个配置类
@Configuration
public class MyConfig{
	//将返回值对象作为组件添加到Spring容器中,该组件id默认为方法名
	@Bean(name = "iservice")
	public MyService myService(){
		return new Myservice();
	}
}

MyConfig是@Configuration注解声明的配置类(类似于声明了一个XML配置文件),该配置类去做Spring Boot自动扫描识别,使用@Bean注解的myService()方法,其返回值对象会作为组件添加到了Spring容器中(类似于XML配置文件中标签配置),并且该组件的id默认是方法名myService
(3)进行测试

@Autowried
private ApplicationContext context;

@Test
public void iocTest(){
	System.out.println(context.containsBean("iservie"))
}

打印结果如下:
true

8 随机数设置及参数间引用

在Spring Boot配置文件中设置属性时,除了可以像前面实例中显示的配置属性值外,还可以使用随机值和参数间引用对属性值进行设置。下面,针对配置文件中这两种属性值的设置方式进行说明

8.1 随机数设置

在Spring Boot配置文件中,随机值设置使用到了Spring Boot内嵌的RandomValuePropertySource类,对一些隐秘属性值或者测试用例属性值进行随机值注入
随机值设置的语法格式为${random.xx},xx表示需要指定生成的随机数类型和范围,它可以生成随机的整数、uuid或字符串,实例代码如下

//配置随机数
my.secret=${random.value}
#配置随机整数
my.number=${random.int}
#配置随机long类型数
my.bignumber=${random.long}
#配置随机uuid
my.uuid=${random.uuid}
#配置小于10的随机整数
my.number.less.than.ten=${random.int(10)}
#配置范围在[1024,65536]之间的随机整数
my.number.in.range=${random.int[1024,65536]}

上述代码中,使用RandomValuePropertySource类中random提供的随机数类型,分别展示了不同类型随机值的设置示例

8.2 参数间引用

在Spring Boot配置文件中,配置文件的属性值还可以进行参数间的引用,也就是在后一个配置的属性值中直接引用先前已经定义过的属性,这样可以直接解析其中的属性值了。
使用参数间引用的好处就是,在多个具有相互关联的配置属性中,只需要对其中一处属性预先配置,其他地方都可以引用,省去了后续多出修改的麻烦
参数间引用的语法格式为${xx},xx表示先前在配置文件中已经配置过的属性名称,示例代码如下

app.name=MyApp
app.description=${app.name} is a Spring Boot application

上述参数间引用设置示例中,先设置了“app.name=MyApp”,将app.name属性的值设置为了MyApp;接着,在app.description属性配置中,使用${app.name}对前一个属性值进行了引用
接下来,通过一个案例来演示随机值设置以及参数间引用的方式进行属性设置的具体使用和效果,具体步骤如下
(1)打开项目中resources目录下的application.properties配置文件,在该配置文件中分别通过随机值设置和参数间引用来配置两个测试属性,示例代码如下

# 随机值设置和参数间引用配置
tom.age = ${random.int[10,20]}
tom.description = tom的年龄可能是 ${tom.age} 

在上述application.properties配置文件中,先使用随机值设置了tom.age属性的属性值,该属性值设置在了[10,20]之间,随后使用参数间引用配置了tom.description属性
(2)打开项目的测试类,在该测试类中新增字符串类型的description属性,将配置文件中的tom.description属性进行注入,然后新增一个测试方法进行输出测试,示例代码如下

@Value("${tom.description}")
private String description;

@Test
public void placeholderTest(){
	System.out.println(description);
}

上述代码中,通过@Value(“${tom.description}”)注解将配置文件中的tom.description属性值注入到了对应的description属性中,在测试方法placeholderTest()中对该属性值进行输出打印
结果如下
tom的年龄可能是 18

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值