这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战」
前言
大家好,又是一个周末的闲暇时光。在实际的项目开发中,经常会自定义一些配置参数信息。会将这些参数信息定义在配置文件中,那么在项目中如何调用这些配置参数信息呢,本文将基于Spring Boot 获取配置文件参数的几种方式进行一个简单的介绍,大家可以根据项目中需要的方式进行使用。
读取配置文件
在Spring Boot 获取配置文件参数的方法总结大概为4种。第一种是使用大家熟悉的@Value主键的方式,第二种是使用@Component与@Value结合在类中读取配置信息,第三种是使用@ConfigurationProperties注解读取配置信息,第四种是使用Environment读取配置信息。
本文将以Spring Boot的application.properties配置文件进行演示。配置参数如下:
custom.parameters.url=https://juejin.cn
custom.parameters.name=掘金 - 代码不止,掘金不停
custom.parameters.nickname=掘金小阿杰
@Value获取配置参数
@Value注解主要作用是从配置文件读配置的参数信息的方式,也就是从application.yaml或者application.properties文件中获配置参数值。
@Value示例获取SpringBoot 中配置文件application.properties中的配置参数信息。
@Value("${custom.parameters.url}")
private String url;
@Value("${custom.parameters.name}")
private String name;
@Value("${custom.parameters.nickname}")
private String nickName;
编写控制器,使用@Value方式获取配置参数。
public class CustomController {
@Value("${custom.parameters.url}")
private String url;
@Value("${custom.parameters.name}")
private String name;
@Value("${custom.parameters.nickname}")
private String nickName;
@Autowired
private CustomParam customParam;
@Autowired
private CustomParam2 customParam2;
@Autowired
private Environment environment;
@ApiOperation(value = "使用@Value方式获取配置参数")
@RequestMapping(value = "getCustomByValue", method = RequestMethod.GET)
public Params getCustomByValue() {
Params params = new Params();
params.setUrl(url);
params.setName(name);
params.setNickName(nickName);
return params;
}
}
启动项目之后。调用接口,请求一下接口,可以看到使用@Value注解的方式已经正常返回我们配置文件中的配置参数信息。这样就获取到配置信息了。
@Component与@Value结合在类中读取配置信息
@Component与@Value结合在类中读取配置信息,其中@Component的主要作用是实现bean的注入 。那么将所有的参数放到一个类中,将这个类注入到需要请求参数的地方即可。基于SpringBoot 的示例如下: 定义一个CustomParam类,用于接收配置文件中的配置参数。
@Component
@Data
public class CustomParam {
@Value("${custom.parameters.url}")
private String url;
@Value("${custom.parameters.name}")
private String name;
@Value("${custom.parameters.nickname}")
private String nickName;
}
定义一个获取配置文件的控制器,注入刚刚编写的配置参数类。然后启动项目,调用接口。
Api(description = "配置文件文件读取测试")
@RequestMapping("custom")
@RestController
public class CustomController {
@Autowired
private CustomParam customParam;
@ApiOperation(value = "使用CustomParam方式获取配置参数")
@RequestMapping(value = "getCustomParam", method = RequestMethod.GET)
public Params getCustomParam() {
Params params = new Params();
params.setUrl(customParam.getUrl());
params.setName(customParam.getName());
params.setNickName(customParam.getNickName());
return params;
}
}
请求接口之后,返回的参数如下图,已经正常返货配置文件中的参数。
@ConfigurationProperties注解读取配置信息
使用 @ConfigurationProperties注解读取配置信息,@ConfigurationProperties是springboot提供读取配置文件的一个注解,支持属性文件和javabean的映射。其对应的bean的后置处理器为ConfigurationPropertiesBindingPostProcessor。在 @ConfigurationProperties注解需要定义配置文件 中配置参数项的prefix也可以结合@PropertySource(value = { "classpath:application.properties" })指定需要的配置文件文件信息,定义一个配置文件配置类。示例如下:
Component
@ConfigurationProperties(prefix = "custom.parameters")
@Data
@PropertySource(value = { "classpath:application.properties" })
public class CustomParam2 {
private String url;
private String name;
private String nickName;
}
@Api(description = "配置文件文件读取测试")
@RequestMapping("custom")
@RestController
public class CustomController {
@Autowired
private CustomParam2 customParam2;
@ApiOperation(value = "使用CustomParam2方式获取配置参数")
@RequestMapping(value = "getCustomParam2", method = RequestMethod.GET)
public Params getCustomParam2() {
Params params = new Params();
params.setUrl(customParam2.getUrl());
params.setName(customParam2.getName());
params.setNickName(customParam2.getNickName());
return params;
}
}
返回结果信息如下:
Environment读取配置信息
第四种是通过Autowired注入Spring的Environment对象。并且通过Environment对象的getProperty("key") 方法可以获取到配置文件中对应 key 的 value。示例如下:
@Api(description = "配置文件文件读取测试")
@RequestMapping("custom")
@RestController
public class CustomController {
@Autowired
private Environment environment;
@ApiOperation(value = "使用getCustomParamByEnvironment方式获取配置参数")
@RequestMapping(value = "getCustomParamByEnvironment", method = RequestMethod.GET)
public Params getCustomParamByEnvironment() {
Params params = new Params();
params.setUrl(environment.getProperty("custom.parameters.url"));
params.setName(environment.getProperty("custom.parameters.name"));
params.setNickName(environment.getProperty("custom.parameters.nickname"));
return params;
}
}
调用接口之后,接口返回信息如下;
结语
好了,以上就是Spring Boot 获取配置文件参数的几种方式汇总,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。
作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。