《分布式消息中间件实践》P153

问题:我直接把作者的源码拷贝下来(包括xml,resource等,作者应该使用的是Eclipse,我复制到IDEA上),依赖加上。执行P153的步骤,报错如下:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.slf4j.impl.Log4jLoggerFactory.<init>(Log4jLoggerFactory.java:66)
    at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:72)
    at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:45)
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
    at org.apache.kafka.clients.producer.KafkaProducer.<clinit>(KafkaProducer.java:228)
    at javaa.ProducerSample.main(ProducerSample.java:17)
Caused by: java.lang.NullPointerException
    at org.apache.kafka.clients.producer.KafkaProducer.close(KafkaProducer.java:1017)
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:414)
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:288)
    at org.apache.kafka.log4jappender.KafkaLog4jAppender.getKafkaProducer(KafkaLog4jAppender.java:243)
    at org.apache.kafka.log4jappender.KafkaLog4jAppender.activateOptions(KafkaLog4jAppender.java:237)
    at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
    at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
    at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
    at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
    at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
    at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
    at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
    ... 10 more

解决:删除resource下的log4j.properties.

详细过程:我也不知道Producer<String, String> producer = new KafkaProducer<String, String>(props);这句代码有什么问题,debug到这里报错的。

我真不觉得报错和这句代码有什么关系,百度,然后找到一篇博客https://www.cnblogs.com/jpfss/p/9876662.html,作者的问题和我一样都是ExceptionInInitializerError并且NullPointExceptiion。

结果原因是知道了,但我仍然不清楚这句代码初始化了什么东西,感觉没问题,(尴尬,我好菜……,这个时候仍然没有注意到报错中的一串log4j相关的重要性)。

再找原因,主要怀疑是依赖可能版本冲突之类的,然后改,无论怎么弄都解决不了。

之后使出最终手段,新建项目,只保留P153的两个要测试的类——成功了……

额,然后我比对依赖,又是各种依赖测试,花了2个多小时,各种可能试完之后,确定不是依赖问题。

再开始删,原本的第一份项目,从类开始删除到resource文件,最后找到了resource下的log4j.properties。

至于根本原因………………

猜你喜欢

转载自www.cnblogs.com/woyujiezhen/p/12284087.html