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:
- 确保项目引入Quarkus Jackson扩展(若未添加,更新依赖配置):
<!-- pom.xml 示例 --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-jackson</artifactId> </dependency>
- 注入
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
相关产品推荐
相关产品推荐

