【问题标题】:Unable to autowire spring bean in log appender无法在日志附加程序中自动装配 spring bean
【发布时间】:2018-10-03 20:59:37
【问题描述】:

我正在尝试在我创建的附加程序下自动装配 SQSFIFOJavaClient。我打印了 Spring Boot 主类中定义的 bean 名称,并且可以看到 SQSFIFOJavaClient bean 定义。但是,bean 没有在下面列出的类中自动装配。 SQSAppender 和 SQSFIFOJavaClient 都在不同的包中,但在添加到组件扫描的同一个基本包下。你能告诉我我在这里缺少什么吗?

@Component
@DependsOn("SQSFIFOJavaClient")
public class SQSAppender extends AppenderBase<ILoggingEvent> {

    @Autowired
    private SQSFIFOJavaClient sqsClient;

我也尝试添加 DependsOn 注释,但 sqsClient 仍然显示为 null。

【问题讨论】:

  • 以防万一您还没有检查;你使用静态方法吗?你用 new sqsClient() 在某处实例化它吗?你在哪里登录 sqsClient ?
  • 感谢@NayoR。不,我没有用 new sqsClient() 实例化它。

标签: java spring spring-boot


【解决方案1】:

Log4j2 将通过调用 @PluginFactory 带注释的方法(根据 this answer)创建一个附加程序。您的 appender 可能没有在那里创建为 Spring bean,很可能会调用 new SQSAppender(...),并且未处理 @Autowired

可以在org.springframework.amqp.rabbit.log4j2.AmqpAppender 中找到如何实现 Spring 管理的 Log4j2 appender 的示例。

【讨论】:

    猜你喜欢
    • 2016-09-27
    • 2012-12-04
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    相关资源
    最近更新 更多