dubbo

踩坑Dubbo+Spring

2017-12-02  本文已影响95人  还是个少年

这几天一直在搞一个新项目,其中用到Dubbo和Spring,这个其实稀疏平常了,没啥好说的。

可是...

就是这么平常的东西却困扰了我几天!!!甚至一度奔溃

问题是啥呢?

用com.alibaba.dubbo.container.Main启动Spring Container容器,但是直到出现Dubbo service started!, Spring容器并有启动起来。what a fuck!!!

先给个编号

有问题的新项目:A

没问题的已有项目:B

尝试1:

用junit直接引用applicationContext.xml,A项目启动正常!由此可以证明Spring的配置没问题。

尝试2:

深入阅读com.alibaba.dubbo.container.Main和Spring启动相关部分的源码。

dubbo在没有特殊配置的情况下,默认根据classpath*:META-INF/spring/applicationContext.xml查找所有jar的applicationContext.xml

默认值

然后对比A项目的配置如下:

A项目的配置

看着没啥问题啊!!!

然后又去看B项目的配置:

B项目的配置

什么?一样的?...

那为啥B项目可以启动呢?

继续看Spring启动源码...

然后单步调试B项目进入Spring内部

然后去B项目的target目录看:

B项目Target目录

而A项目的target目录如下:

A项目Target目录

至此,恍然大悟!!!

及其低级的错误,META-INF.spring和META-INF/spring没有分清楚才导致了上面的问题。

当然这个问题带有一定的蒙蔽性,那就是当META-INF只有一个spring子目录的时候,他在idea上和直接创建一个以META-INF.spring为名称的目录,最后展示的效果是一致的。

这个问题深刻的提醒我自己,任何细节都是值得关注!

上一篇 下一篇

猜你喜欢

热点阅读