自定义配置

SpringBoot免除了项目中大部分手动配置,可以说,几乎所有的配置都可以写在全局配置文件application.peroperties中,SpringBoot会自动加载全局配置文件从而免除我们手动加载的烦恼。但是,如果我们自定义了配置文件,那么SpringBoot是无法识别这些配置文件的,此时需要我们手动加载。

接下来,将针对SpringBoot的自定义配置文件及其加载方式进行讲解。

(1)使用@PropertySource加载配置文件

我们可以使用@PropertySource注解结合@Configuration注解配置类的方式来加载自定义配置文件,@PropertySource注解用于指定自定义配置文件的具体位置和名称。同时,为了保证SpringBoot能够扫描该注解,还需要在类上添加@Configuration注解将实体类作为自定义配置类。

如果需要将自定义配置文件中的属性值注入到对应类的属性中,可以使用@ConfigurationProperties注解或者@Value注解进行属性值注入。

操作步骤:

1、在SpringBoot项目的resources目录下新建一个名为test.properties的自定义配置文件,在该配置文件中编写需要设置的配置属性:

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

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

package com.hardy.springboot_demo.pojo;

/**
* @Author: HardyYao
* @Date: 2021/5/31
*/ import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource; @Configuration // 自定义配置类
@PropertySource("classpath:test.properties") // 指定自定义配置文件的文件位置和文件名称
@EnableConfigurationProperties(MyProperties.class) // 开启对应配置类的属性注入功能
@ConfigurationProperties(prefix = "test") // 指定配置文件注入属性前缀
public class MyProperties { private int id; private String name; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "MyProperties{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}

这里主要是新建一个自定义配置类,通过相关注解引入了自定义的配置文件,并完成了自定义属性值的注入。

针对上述的几个注解,进行逐一讲解:

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

3、编写测试方法进行测试:

@Autowired
private MyProperties myProperties;
@Test
void myPropertiesTest() {
System.out.println(myProperties);
}

测试结果:

(2)使用@Configuration编写自定义配置类

在SpringBoot框架中,推荐使用配置类的方式向容器中添加和配置组件。

在SpringBoot框架中,通常使用@Configuration注解定义一个配置类,SpringBoot会自动扫描和识别配置类,从而替换传统Spring框架中的XML配置文件。

当自定义一个配置类后,还需要在类中的方法上加上@Bean注解进行组件配置,将方法的返回对象注入到Spring容器中,并且组件名称默认使用的是方法名,当然也可以使用@Bean注解的name或value属性自定义组件的名称。

操作步骤:

1、在com.hardy.springboot_demo包下新建一个config包,并在该包下新建一个MyService类,该类中不需要写任何代码:

package com.hardy.springboot_demo.config;

/**
* @Author: HardyYao
* @Date: 2021/5/31
*/
public class MyService {
}

由于该类目前没有任何配置和注解,因此还无法正常被SpringBoot扫描和识别。

2、在config包下,新建一个MyConfig类,并使用@Configuration注解将该类声明为一个配置类,该类的内容如下:

package com.hardy.springboot_demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* @Author: HardyYao
* @Date: 2021/5/31
*/
@Configuration // 定义该类为一个配置类
public class MyConfig { /**
* 将返回值对象作为组件添加到Spring容器中,该组件id默认为方法名
* @return
*/
@Bean
public MyService myService(){
return new MyService();
} }

MyConfig是@Configuration注解声明的配置类(类似于声明了一个XML配置文件),该配置类会被SpringBoot自动扫描识别。

使用@Bean注解的myService()方法,其返回值对象会作为组件添加到Spring容器中(类似于XML配置文件中的标签配置),并且该组件id默认为方法名myService。

3、编写测试方法进行测试

@Autowired
private ApplicationContext applicationContext; @Test
void iocTest() {
System.out.println(applicationContext.containsBean("myService"));
}

上述代码中,先通过@Autowired注解注入Spring容器示例ApplicationContext,然后在测试方法iocTest()中测试查看该容器中是否包含id为myService的组件。

执行测试方法iocTest(),运行结果如下:

从测试结果可以看出,测试方法iocTest()运行成功,显示运行结果为true,表示Spirng的IOC容器中也包含了id为myService的实例对象组件,说明使用自定义配置类的形式完成了向Spring容器进行组件的添加和配置。

随机数设置及参数间引用

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

随机值设置

在SpringBoot配置文件中,随机值设置使用到了SpringBoot内嵌的RandomValuePropertySource类,对一些隐秘属性值或者测试用例属性值进行随机值注入。

随机值设置的语法格式为${random.xx},xx表示需要制定生成的随机数类型和范围,它可以生成随机的整数、uuid或字符串,示例代码如下:

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

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

参数间引用

在SpringBoot配置文件中,配置文件的属性值还可以进行参数间的引用,也就是在后一个配置的属性值中直接引用先前定义过的属性,这样就可以直接解析其中的属性值了。

使用参数间引用的好处就是,在多个具有相互关联的配置属性中,只需要对其中一处属性进行预先配置,那么其他地方都可以引用,省去了后续多处修改的麻烦。

参数间引用的语法格式为${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、打开全局配置文件application.properties,在该配置文件中分别通过随机值设置和参数间引用来配置两个属性,示例代码如下:

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

在上述application.properties配置文件中,先使用随机数设置了hardy.age的属性值,该属性值的取值范围在[10,20]之间,随后使用参数间引用配置了hardy.description属性。

2、在项目的测试类中添加description属性,并将配置文件中hardy.description的属性进行注入,然后新增一个测试方法进行测试,测试代码如下:

@Value("${hardy.description}")
private String description; @Test
void placeholderTest() {
System.out.println(description);
}

在上述代码中,通过@Value("${hardy.description}")注解将配置文件中的hardy.description属性值注入到了对应的description属性中,在测试方法placeholderTest()中对该属性值进行了输出打印。

执行测试方法后,控制台输出结果如下所示:

可以看到,测试方法placeholderTest()成功打印出了description属性的注入内容(age的取值始终在[20,30]之间随机显示),该内容与配置文件中配置的属性值保持一致。

SpringBoot基础学习(三) 自定义配置、随机数设置及参数间引用的更多相关文章

  1. SpringBoot基础系列之自定义配置源使用姿势实例演示

    [SpringBoot基础系列]自定义配置源的使用姿势介绍 前面一篇博文介绍了一个@Value的一些知识点,其中提了一个点,@Value对应的配置,除了是配置文件中之外,可以从其他的数据源中获取么,如 ...

  2. MacOS下SpringBoot基础学习

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"springboot"获取视频和教程资料! b站在线视 ...

  3. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  4. springboot~yml里的自定义配置~续

    之前写了关于读取自定义配置的文章springboot~yml里的自定义配置,而今天主要说一下对复杂配置信息的读取方法,我们简单的配置用@Value注解就可以了,而结构复杂的一般使用@Configura ...

  5. 零基础学习前端1-1配置node及npm环境变量

    零基础学习前端1-1配置node及npm环境变量 ## 1-1配置node及npm环境变量 首先:下载node 可以直接去官方网站下载 1.首先从官网下载安装包 https://nodejs.org/ ...

  6. Python基础学习三

    Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...

  7. SpringBoot基础学习(二) SpringBoot全局配置文件及配置文件属性值注入

    全局配置文件 全局配置文件能够对一些默认配置值进行修改.SpringBoot 使用一个名为 application.properties 或者 application.yaml的文件作为全局配置文件, ...

  8. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(三):配置ActiveXForm运行环境

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  9. salesforce lightning零基础学习(三) 表达式的!(绑定表达式)与 #(非绑定表达式)

    在salesforce的classic中,我们使用{!expresion}在前台页面展示信息,在lightning中,上一篇我们也提及了,如果展示attribute的值,可以使用{!v.expresi ...

随机推荐

  1. day16.网络编程1

    1 osi七层,tcp/ip 5层 1 cs架构和bs架构 2 互联网 3 osi七层.5层(5层名字记住:重点) -物理层 -网线,光纤 -数据链路层 -网卡 -网络层 -路由器 -传输层(运输层) ...

  2. 1038 Recover the Smallest Number

    Given a collection of number segments, you are supposed to recover the smallest number from them. Fo ...

  3. 473. Matchsticks to Square

    Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...

  4. TP5 验证-内置规则

    系统内置的验证规则如下: 格式验证类 require 验证某个字段必须,例如: 'name'=>'require' number 或者 integer 验证某个字段的值是否为数字(采用filte ...

  5. hdu4496并查集的删边操作

    题意:       给你一个图,问你删除一些边后还有几个连通快.. 思路:       典型的并查集删边操作,并查集的删边就是先把不删除的边并查集一边(本题没有不删除的边),然后逆序吧所有要删除的边以 ...

  6. Python中python-nmap模块的使用

    目录 python-nmap的安装 python-nmap模块的使用 portScanner()类 环境:  python 2.7.13 Windows和Linux默认都是不安装python-nmap ...

  7. Windows核心编程 第十一章 线程池的使用

    第11章 线程池的使用 第8章讲述了如何使用让线程保持用户方式的机制来实现线程同步的方法.用户方式的同步机制的出色之处在于它的同步速度很快.如果关心线程的运行速度,那么应该了解一下用户方式的同步机制是 ...

  8. unresolved external symbol _WinMain@16

    vc下,新建一个win32项目,就写了个main函数,打印hello ,出现了如标题所述的错误 原因: 你建立了一个WINDOWS应用程序,可是你却在入口函数的时候使用main而不是WinMain 解 ...

  9. 老Python带你从浅入深探究Tuple

    元组 Python中的元组容器序列(tuple)与列表容器序列(list)具有极大的相似之处,因此也常被称为不可变的列表. 但是两者之间也有很多的差距,元组侧重于数据的展示,而列表侧重于数据的存储与操 ...

  10. XCTF.MISC 新手篇

    目录 泪目 1.this_is_flag 2.pdf 3.如来十三掌 4.give_you_flag 5.坚持60s 6.gif 7.掀桌子 8.ext3 9.stegano 10.SimpleRAR ...