这几天一直在搞一个新项目,其中用到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为名称的目录,最后展示的效果是一致的。
这个问题深刻的提醒我自己,任何细节都是值得关注!
网友评论