踩坑Dubbo+Spring

这几天一直在搞一个新项目,其中用到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为名称的目录,最后展示的效果是一致的。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,993评论 6 342
  • Dubbo是什么 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式...
    Coselding阅读 17,300评论 3 196
  • 提起这个题目,我突然想到了小马过河的故事,这个老掉牙的故事大家应该都还记得,今天提起它是发现它和我正在参加的N...
    明媚Amanda阅读 555评论 0 0
  • 时尚的人们常会讨论到各自的手机功能与手机的使用心得,更变为表示身份的一种工具,也是未来十分有发展性的物品,能...
    3b0a99475f1a阅读 1,432评论 0 0