有没有一种诊断Springbean/服务创建问题的好方法?

有没有一种诊断Springbean/服务创建问题的好方法?,spring,javabeans,startup,monitor,creation,Spring,Javabeans,Startup,Monitor,Creation,我的项目使用spring和springdm进行bean/服务配置。当我尝试导入同样使用spring for DI的旧项目时,将不会创建bean 一个明确的例子 我首先在spring-appContext.xml中定义url别名 <bean name="xxxx" class="XRegistry" init-method="init"> <property name="webRoot" value="/WebContent"></property>

我的项目使用spring和springdm进行bean/服务配置。当我尝试导入同样使用spring for DI的旧项目时,将不会创建bean

一个明确的例子

我首先在spring-appContext.xml中定义url别名

<bean name="xxxx" class="XRegistry" init-method="init">
    <property name="webRoot" value="/WebContent"></property>
    <property name="alias" value="/test"></property>
    <property name="cAliasPattern" value="/test/*.do" />
    <property name="conConfigFile" value="ddd.xml"/>
</bean>

在ddd.xml中,我使用类似/test/abc.do的url定义了一些控制器bean

在eclipse中作为OSGi框架启动时不会发生错误。 但是当我尝试访问URL(/test/abc.do)时,“未知OSGi URL:”被满足

真正让我困惑的问题是我不知道从哪里开始。我的bundle依赖于spring bundle,具有appContext.xml和dispatcher.xml。这只是一个正常的spring使用场景

由于春天对我来说就像一个黑匣子,我只能尝试一些我能想到的其他可能的原因,但直到现在还没有解决它。有人知道如何监控spring启动过程或有用的日志吗

谢谢

编辑使用spring dm时,您需要创建一个包含log4j.properties的新片段以启用日志记录。这有助于跟踪spring启动错误

正如我在第一个答案中所解释的,根本原因在于两种选择

  • 对于工作区和目标平台中都存在的捆绑包,请在当前工作区中增加捆绑包的版本。当发生错误时,您还应该查看依赖项包
  • 删除目标平台中的高版本捆绑包

  • 您是否尝试过将spring框架的日志级别设置为调试

    例如


    当我试图诊断bean创建的问题时,这始终是我的第一个出发点。

    有人能给出一些建议吗?你没有提供足够的信息让任何人来帮助你。你说的是“url映射”。什么样的映射?您是如何尝试访问它的?为什么您希望它首先可用?@Ryan,我想知道是否有一种通用的方法来诊断SpringBean创建问题。关于我的问题,我在问题部分进行了更新,以澄清问题。是的,我访问了URL(/test/abc.do),并且遇到了“未知URL”。从我对spring的使用来看,通过在bundle中定义一个经过验证的spring配置文件,然后在SpringEnv中运行bundle,spring将处理所有后端工作。因此,我希望能够成功访问URL。我认为您最好向了解您正在使用的应用程序的人寻求帮助。似乎你对它的了解还不够,甚至无法描述你的问题。需要调查的事情:什么是“XRegistry”?OSGi容器中URL可用的机制是什么?@Ryan,对于业务需求,我没有指定具体的java类名。我找到了根本原因,即服务的依赖项列表中有一个包由于某些配置错误而未启动。但是我用了一些愚蠢的方法,一个一个地检查。无论如何,谢谢你的帮助。是的,我创建了一个片段来附加log4j属性。然后我可以看到spring日志信息。我们使用相同的方法,对吗?是的,它在创建OSGi服务时显示一些NPE异常。我正在使用Spring2.5.5和SpringOSGi1.1.0。我试图导入spring源代码,但在创建导出包时发生了NPE。但是,我的包显式导出包。这真让我困惑。但是如果您多次刷新工作区,NPE可能会消失。所以这真的很棘手。你有没有检查过NPE发生在哪一类以及对象是在哪里创建的?感谢上帝。我找到了根本原因,那就是我使用了两个不同的框架。1.OSGi环境2的等式。用于动态服务的Spring dm。在我的场景中,bundle同时存在于工作区和目标平台中,而target中的bundle版本比当前工作区中的要高,equalix将在当前工作区中激活bundle,而springdm将采用高版本插件。当spring为这个包构造上下文时,它会发现导出的包是空的,因为它没有激活。而且SpringDM2.5也没有解决这个NPE,所以问题发生了。@beny23,我不敢相信这没有更多的投票权。我记得以前这样做过,但忘记了标志/语法/记录器名称。谢谢你的信息。
    log4j.rootLogger=WARN, stdout
    [...]
    log4j.logger.org.springframework=DEBUG