5 个 springboot配置文件注入参数说明

简介: 5 个 springboot配置文件注入参数说明

在SpringBoot中注入各种类型(String,List,Map,Object)配置

背景

在开发过程中,绝大多数场景都是要使用一些配置项的。至于配置项如何注入到应用程序中,一直没有过多的关注过。今天抽了点时间实际试了下,这里做个简单的记录,便于需要的朋友了解下。

在下面的讲述中,针对下面的一组配置来进行说明,分别演示读取字符串String、列表List、哈希表Map和对象Object进行说明。开发框架为Springboot。

config:
  str: 123456
  list:
    - 1
    - 2
    - 3
    - 4
    - 5
  map:
    1: first
    2: second
    3: third
  entity:
    key: name
    value: majing

1、String类型配置注入

对于String类型的配置,注入最简单,只要简单实用@Value注解就可以了,如下:

@Value("${config.str}")
private String strConfig;

2、List类型配置注入

对于List类型的配置,注入有两种方式,如下所示。

(1)如果在application.yaml文件中如下配置,

config:
  list:
    - 1
    - 2
    - 3
    - 4
    - 5

那么直接使用@Value注解就可以了,如下所示:

@Value("${config.list}")
private List<Integer> listConfig;

(2)如果在application.yaml文件中不是按照列表格式配置的,

config:
  list: 1,2,3,4,5

那么在使用@Value注解时需要注意,使用@Value("${config.list}")没法完成解析,这时候需要做如下修改,调用split()方法对读取的字符串值进行分隔,如果分隔符不一样,那直接替换成其他分隔符就好了。

@Value("#{'${config.list}'.split(',')}")
private List<Integer> listConfig;

3、Map类型配置注入

maps: "{key1: 'value1', key2: 'value2'}"
punishMap: "{1:7,2:7,3:30,4:30,5:1825}"

注入:

@Value("#{${maps}}")  
private Map<String,String> maps;
@Value("#{${punishMap:}}")
private Map<Integer, Integer> punishMap;

注意上面的map解析中,一定要用""把map所对应的value包起来,要不然解析会失败,导致不能转成 Map<String,String>。

4、实体类注入

@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "config")
public class Config {
    private String str;
    private List<Object> list;
    private Map<String,String> map;
    public String getStr() {
        return str;
    }
    public void setStr(String str) {
        this.str = str;
    }
    public List<Object> getList() {
        return list;
    }
    public void setList(List<Object> list) {
        this.list = list;
    }
    public Map<String, String> getMap() {
        return map;
    }
    public void setMap(Map<String, String> map) {
        this.map = map;
    }
}

在这个配置实体类中,我们定义了String类型、List类型和Map类型字段,然后在Config类上使用@ConfigurationProperties(prefix = “config”)注解来指出该实体类对应的配置项前缀是application.yaml中config开头的配置项,配置项如下:

config:
  str: 123456
  list:
    - 1
    - 2
    - 3
    - 4
    - 5
  map: {1: first, 2: second, 3: third}

或者如下配置:

config:
  str: 123456
  list:
    - 1
    - 2
    - 3
    - 4
    - 5
  map:
    1: first
    2: second
    3: third

需要说明的是List类型必须按照上述配置,否则没法解析。

通过简单的测试接口,我们可以看到配置已经正确的注入了。

Config{str='123456', list=[1, 2, 3, 4, 5], map={1=first, 2=second, 3=third}}

5、静态属性注入

直接用@Value()的方式不能注入值, 要用set注入

@Component
public class OrderNoUtil {
    // B3230651812529
    private static String[] yearCodes;
    private static Integer beginYear;
    @Value("${missyou.year-begin}")
    private void setBeginYear(Integer beginYear) {
        OrderNoUtil.beginYear = beginYear;
    }
    @Value("${missyou.year-codes}")
    public void setYearCodes(String yearCodes) {
        OrderNoUtil.yearCodes = yearCodes.split(",");
    }
    public static String makeOrderNo() {
        StringBuilder joiner = new StringBuilder();
        Calendar calendar = Calendar.getInstance();
        String mills = String.valueOf(calendar.getTimeInMillis());
        String micro = LocalDateTime.now().toString();
        String random = String.valueOf(Math.random() * 1000).substring(0, 2);
        joiner.append(OrderNoUtil.yearCodes[calendar.get(Calendar.YEAR) - OrderNoUtil.beginYear])
                .append(Integer.toHexString(calendar.get(Calendar.MONTH) + 1).toUpperCase())
                .append(calendar.get(Calendar.DAY_OF_MONTH))
                .append(mills.substring(mills.length() - 5))
                .append(micro.substring(micro.length() - 3))
                .append(random);
        return joiner.toString();
    }
}

欢迎大家留言指导。

目录
相关文章
|
4月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
439 3
|
11月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2636 1
|
7月前
|
前端开发 Java 数据库连接
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
|
12月前
|
Java Spring
SpringBoot 实战 不同参数调用不同实现
本文介绍了如何在实际工作中根据不同的入参调用不同的实现,采用`map+enum`的方式实现优雅且严谨的解决方案。通过Spring Boot框架中的工厂模式或策略模式,避免了使用冗长的`if...else...`语句。文中详细展示了定义接口、实现类、枚举类以及控制器调用的代码示例,确保用户输入的合法性并简化了代码逻辑。
447 1
SpringBoot 实战 不同参数调用不同实现
|
11月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
453 0
|
Java 数据库连接 数据库
springboot启动配置文件-bootstrap.yml常用基本配置
以上是一些常用的基本配置项,在实际应用中可能会根据需求有所变化。通过合理配置 `bootstrap.yml`文件,可以确保应用程序在启动阶段加载正确的配置,并顺利启动运行。
1825 2
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
2988 3
|
JSON NoSQL Java
springBoot:jwt&redis&文件操作&常见请求错误代码&参数注解 (九)
该文档涵盖JWT(JSON Web Token)的组成、依赖、工具类创建及拦截器配置,并介绍了Redis的依赖配置与文件操作相关功能,包括文件上传、下载、删除及批量删除的方法。同时,文档还列举了常见的HTTP请求错误代码及其含义,并详细解释了@RequestParam与@PathVariable等参数注解的区别与用法。
172 2
|
Java 测试技术 Spring
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
这篇文章介绍了Spring Boot中配置文件的语法、如何读取配置文件以及如何通过静态工具类读取配置文件。
1308 0
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
|
JSON Java 数据格式
springboot 参数统一处理
springboot 参数统一处理
215 2