【Spring Boot 快速入门】二十四、Spring Boot 获取配置文件参数的几种方式汇总

2,985 阅读4分钟

这是我参与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注解的方式已经正常返回我们配置文件中的配置参数信息。这样就获取到配置信息了。

图片.png

@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;
    }
}

请求接口之后,返回的参数如下图,已经正常返货配置文件中的参数。

图片.png

@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;
    }
}

返回结果信息如下:

图片.png

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;
    }

}

调用接口之后,接口返回信息如下;

图片.png

结语

  好了,以上就是Spring Boot 获取配置文件参数的几种方式汇总,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。

  作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。