全局配置文件application.properties
每次新建项目时,都会生成一个全局配置文件(application.properties),它会被首次加载。通过全局配置文件我们可以修改默认端口或者默认虚拟路径等
比如我们新建项目后,默认是8080端口,无虚拟路径,如下图:
我们在全局文件中添加修改端口和路径的配置
//普通属性值的修改
server.port=8081
server.servlet.context-path=/chapter02
重新启动项目
对象类型
新建一个属性类
//对象类型修改
person.id=1
person.name=lxf
person.hobby=paly,read,sleep
person.family=father,mother
person.map.k1=v1
person.map.k2=v2
person.pet.type=dog
person.pet.name=kity
全局配置文件Application.yaml
YAML文件格式是Spring Boot支持的一种JSON超集文件格式。相较于传统的Pro pretties配置文件,YAML文件以数据为核心,是一种更为直观且容易被电脑识别的数据序列化格式。
Application.yaml工作原理和application.properties一样。
通过空格来判断是否是同一层级关系。
语法
key: (空格) value
# 当value值为普通数据类型的配置
server:
port: 8082
servlet:
context-path: /lxflxf
当value值为数组或者单列集合,yaml配置文件如下:
#当value值为数组或者单列集合
hobby:
- paly
- read
- sleep
#方式2
hobby:[paly,read,sleep]
#当值为map时
map:
k1: v1
k2: v2
#方式2
map: {k1: v1, k2: v2}
使用YAML文件对实体类对象进行属性配置,举例如下:
person:
id: 2
name: list
hobby: [sing,read]
family: [father,mother]
map: {k1: v1, k2: v2}
pet: {type: cat, name: tom}
配置文件属性值注入
使用@ConfigigurationProperties注入属性
对于系统默认的一些属性,会自动扫描配置文件并修改,而对象自定义的一些对象属性就需要进行注入才可以。这里需要了解到两个注释如下:
@Component //生成当前类的实例对象存到IOC容器中
@ConfigurationProperties(prefix = "person") //将配置文件中的前缀为person的每个属性的值映射到当前类中变量上
配置文件中对对象属性赋值如下
最后通过测试类测试,注入成功
注意:使用@ConfigigurationProperties注解批量注入属性值时,要保证配置文件中的属性与对应实体类的属性保持一致,否则无法正确获取并注入属性值。
如果想要对某一个属性进行注入操作,可以使用@Value注解,不用写set、get方法也能完成注入。使用案例如下:
具体区别如下表:
@ConfigigurationProperties支持JSR303数据校验,需要添加如下注解
@Validated //数据校验
比如要验证邮箱是否合法,就要@Email注解。然后在配置文件中为属性赋值进行测试。如果不符合email规则就会报错。
Spring Boot自定义配置
SpringBoot免除了项目中的大部分手动配置,几乎所有的配置都可以可以写在配置文件中,但是我们自定义的配置文件是Spring Boot是无法自动识别的,需要我们手动加载,这里呢,就需要用到如下注解了。
@Configuration //制定当前类为配置类,可以使用Component代替
@PropertySource("classpath:test.properties") //制定自定义配置文件的位置和名称
@EnableConfigurationProperties(MyProperties.class) //开启配置类的属性注入功能
@ConfigurationProperties(prefix = "test") //起个别名
这里需要注意一下,如果使用Component代替就不需要@EnableConfigurationProperties注解了。
这里新建一个配置文件test.properties,新建一个类,然后测试一下,发现新建的自定义配置文件被加载,值注入进去了。
Profile文件多环境配置
为什么需要多环境配置
在实际开发中,应用程序通常需要部署到不同的运行环境中,例如测试环境,开发环境等等,不用环境需要不同的环境配置,如果每次都要修改配置文件就会不方便,所以需要对项目设置多环境配置。
多环境配置文件格式
application-{profile}.properties //{profile}对应具体的环境标识
首先先建三个配置文件,分别是生产环境,开发环境和测试环境。
配置文件名分别是:
application-prod.properties //设置端口 server.port=8083
application-dev.properties //设置端口 server.port=8086
application-test.properties //设置端口 server.port=8087
命令行方式
首先先通过命令行的方式启动生产环境,生产环境设置的端口是8083,如下所示,其他两个同理。
java -jar chapter02-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
全局配置文件方式
在全局配置文件中通过spring.profiles.active
来进行配置,如果想启动开发环境,直接在全局配置文件填写如下:
spring.profiles.active=dev
端口已经改变,成功启动为开发环境。
@Profile注解多环境配置
相关注解
@Profile:作用于类,通过value属性指定环境配置
这里为了演示,先定义一个接口,如下:
public interface DBConnector {
public void configure();
}
定义两个类实现如下接口,用来模拟生产环境和测试环境。生产环境类如下:
@Configuration
@Profile(value = "dev")
public class DevDBConnector implements DBConnector{
@Override
public void configure() {
System.out.println("数据库配置===dev");
}
}
重点就是@Profile注解,value值用来指定相关环境。注解方式也要在全局配置文件中配置spring.profiles.active的值。都配置好后,在测试类中进行测试,相关代码如下:
@Autowired
private DBConnector dbConnector;
@Test
public void dbtest(){
dbConnector.configure();
}
运行测试,发现成功输出数据库配置===dev
,如下:
想要切换环境,只需要修改Profile中value值就可以了。
随机值设置
语法格式:
${random.xx}
比如在全局配置文件中有如下配置:
然后我在测试类中进行测试,案例代码如下:
@Value("${my.secret}")
private String secret;
@Test
public void testnum(){
System.out.println(secret);
}
然后输出结果如下:其他同理
参数间引用
语法格式:
${xxx} xxx表示先前在配置文件中已经配置过的属性名。
什么意思呢?举一个例子,比如我在全局配置文件中,之前设置了一个配置,name=lxflxf,现在有了一个新需求就是添加lxflxf的年龄。那我们就可以使用参数间引用,用上方的格式,我们就可以写 age=${name} is 18
现在我们代码实现一下,全局配置文件写入:
name=lxflxf
age=${name} is 18
测试代码如下
@Value("${age}")
private String test;
@Test
public void testage(){
System.out.println(test);
}
发现参数引用成功,如下:
【往期推荐】
SpringBoot入门笔记第一篇 | 环境准备、构建项目、单元测试、热部署
漏洞复现 | CVE-2022-0847内核提权漏洞(POC已公开)
漏洞监控平台——Monitor(源码在文末)
使用poste搭建自己的邮件服务器
实战 | 一次杀猪盘的拿shell经历
DC-1靶机实战和分析
实战|一个表白墙引发的“血案”
原文始发于微信公众号(小艾搞安全):SpringBoot入门笔记第二篇 | Spring Boot核心配置于注解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论