如何使用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接口来进行高级的转换操作。

目录
相关文章
|
7月前
|
Java 数据安全/隐私保护
SpringBoot - 优雅的实现【参数分组校验】高级进阶
SpringBoot - 优雅的实现【参数分组校验】高级进阶
186 0
|
7月前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
SQL 关系型数据库 MySQL
SpringBoot自定义配置注入的方式:自定义配置文件注入,从mysql读取配置进行注入
SpringBoot自定义配置注入的方式:自定义配置文件注入,从mysql读取配置进行注入
323 0
|
7月前
|
Java Spring
SpringBoot - 优雅的实现【自定义参数校验】高级进阶
SpringBoot - 优雅的实现【自定义参数校验】高级进阶
126 0
|
前端开发 Java
SpringBoot自定义枚举序列化方式
SpringBoot自定义枚举序列化方式
1114 1
springboot自定义外部扩展文件
在springboot启动的时候调用run方法,可以看到run方法里面的内容,其中有一个getRunListeners方法
|
Java Spring
Spring-注入参数详解-[通过util命名空间简化集合类型的配置]
Spring-注入参数详解-[通过util命名空间简化集合类型的配置]
129 0
|
Java Spring
Spring 注解编程之注解属性别名与覆盖
前两篇文章咱聊了深入了解了 Spring 注解编程一些原理,这篇文章我们关注注解属性方法,聊聊 Spring 为注解的带来的功能,属性别名与覆盖。
Spring 注解编程之注解属性别名与覆盖
|
XML 存储 设计模式
Spring 源码学习(二)-默认标签解析(一)
从上一篇笔记可以看出,在容器注册 bean 信息的时候,做了很多解析操作,而 xml 文件中包含了很多标签、属性,例如 bean 、 import 标签, meta 、look-up 和 replace等子元素属性。
Spring 源码学习(二)-默认标签解析(一)
|
XML 设计模式 Java
Spring 源码学习(二)-默认标签解析(二)
从上一篇笔记可以看出,在容器注册 bean 信息的时候,做了很多解析操作,而 xml 文件中包含了很多标签、属性,例如 bean 、 import 标签, meta 、look-up 和 replace等子元素属性。
Spring 源码学习(二)-默认标签解析(二)