无法在logback appender中使用spring ApplicationContext

时间:2017-05-18 10:24:44

标签: java spring spring-boot logback

技术:     spring boot,logback

我编写了一个邮件appender来重用spring托管的JavaMailSender。为了在spring中获取JavaMailSender实例,我在类中有了这个全局静态字段

public class ApplicationContextHolder implements ApplicationContextAware {
    public static ApplicationContext applicationContextHolder = null;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        applicationContextHolder = applicationContext;
    }

}

在appender中,我直接使用静态字段

if (javaMailSender == null) {
        javaMailSender = ApplicationContextHolder.applicationContextHolder.getBean(JavaMailSender.class);
    }

问题是字段applicationContextHolder为null。我调试setApplicationContext方法

enter image description here

并且发现applicationContext被注入。我认为类加载器可能不是同一个,但Thread.currentThread().contextClassLoader具有相同的toString值。 任何人都知道为什么?如何在appender中获取applicationContext?

start + in controller + in appender

0 个答案:

没有答案