如何使用Quarkus的@ConfigProperty注解来注入列表类型的配置项?

简介: 【2月更文挑战第16天】

Quarkus是一款轻量级的Java微服务框架,它提供了快速启动时间和低内存消耗的特性。在Quarkus应用程序中,我们经常需要读取配置文件中的值,并将其注入到应用程序的相应组件中。本文将介绍如何使用Quarkus的@ConfigProperty注解来注入列表类型的配置项。

1. 什么是 @ConfigProperty 注解?

@ConfigProperty是Quarkus框架中的一个注解,它可以用于将配置文件中的值注入到应用程序的属性或参数中。通过使用@ConfigProperty注解,我们可以轻松地获取并使用配置文件中的值,而无需手动解析配置文件。

2. 注入简单类型的配置项

在开始讲解如何注入列表类型的配置项之前,我们先来看一下如何注入简单类型(如String、int、boolean等)的配置项。假设我们有一个配置文件application.properties,其中包含如下配置项:

myapp.greetings=Hello,Quarkus
myapp.max-connections=10
myapp.debug=true

我们可以通过在应用程序的组件中添加带有@ConfigProperty注解的属性或构造函数参数来实现配置项的注入。示例如下:

@ApplicationScoped
public class GreetingService {
   
   

    @ConfigProperty(name = "myapp.greetings")
    private String greetings;

    @ConfigProperty(name = "myapp.max-connections")
    private int maxConnections;

    @ConfigProperty(name = "myapp.debug")
    private boolean debug;

    // 省略其他代码...
}

在上面的示例中,我们通过@ConfigProperty注解将配置文件中的值注入到了GreetingService组件中的相应属性中。

3. 注入列表类型的配置项

除了简单类型的配置项外,有时候我们还需要注入列表类型(List、Set等)的配置项。假设我们的配置文件application.properties中有一个包含多个值的配置项:

myapp.names=Alice,Bob,Charlie

我们可以通过使用@ConfigProperty注解和类型转换来实现列表类型配置项的注入。示例如下:

@ApplicationScoped
public class NameService {
   
   

    @ConfigProperty(name = "myapp.names")
    private List<String> names;

    // 省略其他代码...
}

在上面的示例中,我们将配置文件中的myapp.names配置项注入到了NameService组件的names属性中。由于配置项是以逗号分隔的字符串形式存在的,所以需要将其转换为List类型。

4. 高级用法:使用 Converter 转换器

有时候,我们可能需要在注入列表类型的配置项时进行一些高级的转换操作。Quarkus提供了Converter接口,我们可以实现该接口来自定义转换器,以便满足我们的需求。

假设我们需要将配置文件中逗号分隔的字符串转换为Person对象的列表。首先,我们需要实现一个转换器:

@Singleton
public class PersonListConverter implements Converter<List<Person>> {
   
   

    @Override
    public List<Person> convert(String value) {
   
   
        String[] parts = value.split(",");
        List<Person> persons = new ArrayList<>();
        for (String part : parts) {
   
   
            persons.add(new Person(part.trim()));
        }
        return persons;
    }
}

上述代码定义了一个PersonListConverter类,它实现了Converter接口,并在convert方法中执行了自定义的转换逻辑。

接着,我们需要在注入列表类型的配置项时,使用该转换器:

@ApplicationScoped
public class PersonService {
   
   

    @ConfigProperty(name = "myapp.names", converter = PersonListConverter.class)
    private List<Person> persons;

    // 省略其他代码...
}

在上面的示例中,我们通过指定converter属性来使用自定义的转换器PersonListConverter。

结论

本文介绍了如何使用Quarkus的@ConfigProperty注解来注入列表类型的配置项。我们可以通过简单的添加注解和指定属性类型来实现配置项的注入。另外,我们还介绍了使用Converter接口来进行高级的转换操作。

目录
相关文章
|
3天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
3月前
|
开发框架 Java .NET
SpringBoot3中的属性绑定注解和YMAL配置文件、日志
SpringBoot3中的属性绑定注解和YMAL配置文件、日志
|
8月前
|
Java Spring
Spring项目中value注解,@Value不能a够读取到配置文件的值,无法成功注入值的问题解决(超简单)
Spring项目中value注解,@Value不能a够读取到配置文件的值,无法成功注入值的问题解决(超简单)
169 0
|
11月前
|
Java Spring
Spring-注入参数详解-[通过util命名空间简化集合类型的配置]
Spring-注入参数详解-[通过util命名空间简化集合类型的配置]
96 0
SpringBoot使用@ConstructorBinding注解进行配置属性绑定
`SpringBoot2.2`版本发行后一些新的功能也渐渐的浮出了水面,在之前版本`SpringBoot`的配置文件与类之间的属性绑定(`@ConfigurationProperties`)是通过`Setter`方法来进行绑定对应的配置值,而从`2.2`版本开始支持了`构造函数`的方式进行绑定。
|
Java Spring 容器
第九篇:SpringBoot 配置高级 ConfigurationProperties注解 宽松绑定/松散绑定
第九篇:SpringBoot 配置高级 ConfigurationProperties注解 宽松绑定/松散绑定
232 0
第九篇:SpringBoot 配置高级 ConfigurationProperties注解 宽松绑定/松散绑定
|
存储 Java Spring
自定义spring注解使用
自定义spring注解使用+ThreadLocal使用
自定义spring注解使用
|
前端开发 Java Spring
基于SpringBoot参数校验器拓展自定义参数校验
想必工作中大家为了保证接口的稳定性与安全性都会对入参进行校验。五花八门的校验写法会让我们的代码不够整洁,本文将介绍如何使用SpringBoot为我们提供的参数校验器,并对其进行扩展,让其能够实现自定义校验。当然在一些互联网项目中,为保证接口的高性能,校验都是放在前端做的,但是在阿里开发规约中是这样说的越是简单的接口越不需要进行参数校验,越是复杂的接口越需要参数校验,因为复杂的接口试错成本很高,校验对接口性能的影响微乎其微。
266 0
|
Java 关系型数据库 MySQL
【SpringBoot 基础系列】接口上注解 AOP 拦截不到场景兼容实例演示
在 Java 的开发过程中,面向接口的编程可能是大家的常态,切面也是各位大佬使用 Spring 时,或多或少会使用的一项基本技能;结果这两个碰到一起,有意思的事情就发生了,接口方法上添加注解,面向注解的切面拦截,居然不生效 这就有点奇怪了啊,最开始遇到这个问题时,表示难以相信;事务注解也挺多是写在接口上的,好像也没有遇到这个问题(难道是也不生效,只是自己没有关注到?) 接下来我们好好瞅瞅,这到底是怎么个情况
484 0
【SpringBoot 基础系列】接口上注解 AOP 拦截不到场景兼容实例演示
|
XML 设计模式 Java
Spring 源码学习(二)-默认标签解析(二)
从上一篇笔记可以看出,在容器注册 bean 信息的时候,做了很多解析操作,而 xml 文件中包含了很多标签、属性,例如 bean 、 import 标签, meta 、look-up 和 replace等子元素属性。
Spring 源码学习(二)-默认标签解析(二)