You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus:如何打印@ConfigMapping接口绑定的配置属性

在Quarkus中打印@ConfigMapping接口的配置属性到日志

方法1:直接利用代理类的默认toString()

Quarkus为@ConfigMapping接口生成的代理类默认实现了toString(),直接注入接口实例后调用toString()就能打印完整配置。示例代码:

import io.quarkus.runtime.annotations.ConfigMapping;
import org.jboss.logging.Logger;
import jakarta.inject.Singleton;

@ConfigMapping(prefix = "my.app")
public interface AppConfig {
    String name();
    int port();
    DatabaseConfig database();

    interface DatabaseConfig {
        String url();
        String username();
    }
}

@Singleton
public class ConfigPrinter {
    private static final Logger LOG = Logger.getLogger(ConfigPrinter.class);

    public ConfigPrinter(AppConfig appConfig) {
        LOG.info("当前应用配置:" + appConfig);
    }
}

启动后日志会输出类似格式:

AppConfig[name=my-service, port=8080, database=DatabaseConfig[url=jdbc:h2:mem:default, username=sa]]

方法2:用Jackson序列化为JSON格式(可读性更强)

如果需要结构化的输出,可借助Jackson将接口实例转成格式化后的JSON:

  1. 确保项目引入Quarkus Jackson扩展(若未添加,更新依赖配置):
<!-- pom.xml 示例 -->
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-jackson</artifactId>
</dependency>
  1. 注入ObjectMapper并序列化配置:
import com.fasterxml.jackson.databind.ObjectMapper;
import org.jboss.logging.Logger;
import jakarta.inject.Singleton;

@Singleton
public class ConfigPrinter {
    private static final Logger LOG = Logger.getLogger(ConfigPrinter.class);

    public ConfigPrinter(AppConfig appConfig, ObjectMapper objectMapper) throws Exception {
        String configJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(appConfig);
        LOG.info("当前应用配置(JSON格式):\n" + configJson);
    }
}

方法3:手动拼接属性(按需打印)

如果只需要输出部分配置项,可手动获取属性并拼接:

import org.jboss.logging.Logger;
import jakarta.inject.Singleton;

@Singleton
public class ConfigPrinter {
    private static final Logger LOG = Logger.getLogger(ConfigPrinter.class);

    public ConfigPrinter(AppConfig appConfig) {
        LOG.info("应用名称:" + appConfig.name());
        LOG.info("端口号:" + appConfig.port());
        LOG.info("数据库URL:" + appConfig.database().url());
    }
}

注意:@ConfigMapping注解仅支持接口,不要尝试将其改为类,Quarkus会通过动态生成代理类的方式完成配置绑定。

内容的提问来源于stack exchange,提问作者Inessa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:32:42